安卓开发---08 拓展控件和适配器

  • ExpandableListView二级菜单
  • ViewPager、PagerAdapter viewPager+fragment

1.ExpandableListView二级菜单
完成一个ExpandableListView,很简单,二级选择,只需要准备三个东西:
(1)一级选择的布局//也就是父布局
(2)二级选择的布局//也就是子布局
(3 ExtendableListViewAdapter的自定义//也就是适配器的书写
先在activity布局里面写上ExpandableListView控件‘,再完成父布局(一级菜单布局)和子布局(二级菜单布局)

编写适配器继承BaseExpandableListAdapter

需要传进两组数据  一组为父布局数据,一组为子布局数据
private List<String> fList;//一级菜单数据
      	private List<String> sList; //二级菜单数据 //二级菜单数据
       private LayoutInflater inflater;//布局加载器对象
构造函数
public ExLvAdapter(List<String> fList, List<List<String>> sList, Context context) {
        this.fList = fList;
        this.sList = sList;
        this.inflater=LayoutInflater.from(context);
}

各个方法代表的意思:

@Override  //获得父项的条目数
    public int getGroupCount() {
        return fList.size();
    }
    @Override    //某个父项的子项的个数
    public int getChildrenCount(int groupPosition) {
        return sList.get(groupPosition).size();
    }
    @Override    //获得某个父项
    public Object getGroup(int groupPosition) {
        return fList.get(groupPosition);
    }
    @Override  //获得某个子项
    public Object getChild(int groupPosition, int childPosition) {
        return sList.get(groupPosition).get(childPosition);
    }

 @Override  //父项的Id
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
    @Override  //子项的Id
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
    @Override
    public boolean hasStableIds() {
        return false;
    }

 @Override   //获取父项的view
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if(convertView==null){
            convertView=inflater.inflate(R.layout.exlv_father_layout,null);
        }
        TextView tv_fa=convertView.findViewById(R.id.tv_fa);
        tv_fa.setText(fList.get(groupPosition));
        return convertView;
    }

@Override    //获取子项的view
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
       if(convertView==null){
           convertView=inflater.inflate(R.layout.exlv_son_layout,null);
       }
        TextView tv_fa=convertView.findViewById(R.id.tv_son);
        tv_fa.setText(sList.get(groupPosition).get(childPosition));
        return convertView;
    }

 @Override  //子项是否可选中,如果要设置子项的点击事件,需要返回true
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
获取子项的点击事件:setOnChildClickListener

2.ViewPager微信滑动
Viewpager,视图翻页工具,提供了多页面切换的效果,ViewPager的基本用法:可以在ViewPager中加载一个ImageView,也可以加载一个Fragment。

 //准备vierPager  和下面四个按钮
    private ViewPager vp;
    private ImageView v1;
    private ImageView v2;
    private ImageView v3;
    private ImageView v4;
//准备fragment集合
    List<Fragment> fList=new ArrayList<Fragment>();
    //准备适配器
    FragmentPagerAdapter adapter;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setTab(0);

    }
    private void initView() {
        vp=findViewById(R.id.vp);
        v1=findViewById(R.id.v1);
        v2=findViewById(R.id.v2);
        v3=findViewById(R.id.v3);
        v4=findViewById(R.id.v4);
        v1.setOnClickListener(this);
        v2.setOnClickListener(this);
        v3.setOnClickListener(this);
        v4.setOnClickListener(this);
        initFragment();
        //将fragment
        adapter=new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return fList.get(position);
            }
@Override
            public int getCount() {
                return fList.size();
            }
        };
        vp.setAdapter(adapter);

//设置滑动监听
        vp. addOnPageChangeListener (new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
              //  int currentItem=vp.getCurrentItem();
              // setTab(currentItem);
				setTab(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

//准备fragment集合
    private void initFragment() {
        Fragment1 fg1=new Fragment1();
        Fragment2 fg2=new Fragment2();
        Fragment3 fg3=new Fragment3();
        Fragment4 fg4=new Fragment4();
        fList.add(fg1);
        fList.add(fg2);
        fList.add(fg3);
        fList.add(fg4);

    }
    private void resetView() {
        //还原按钮
       v1.setBackgroundColor(getResources().getColor(R.color.colorGray));
       v2.setBackgroundColor(getResources().getColor(R.color.colorGray));
       v3.setBackgroundColor(getResources().getColor(R.color.colorGray));
       v4.setBackgroundColor(getResources().getColor(R.color.colorGray));
    }


private void setTab(int i){
        //按钮上色
        resetView();
        switch (i) {
            case 0:
                v1.setBackgroundColor(getResources().getColor(R.color.colorWhite));
                break;
            case 1:
                v2.setBackgroundColor(getResources().getColor(R.color.colorWhite));
                break;
            case 2:
                v3.setBackgroundColor(getResources().getColor(R.color.colorWhite));
                break;
            case 3:
                v4.setBackgroundColor(getResources().getColor(R.color.colorWhite));
                break;

        }
    }
    public void Select(int i){
        vp.setCurrentItem(i);
        setTab(i);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.v1:
                //点击按钮
                Select(0);
                break;
            case R.id.v2:
                Select(1);
                break;
            case R.id.v3:
                Select(2);
            break;
            case R.id.v4:
                Select(3);
                break;
        }
    }

发布了19 篇原创文章 · 获赞 27 · 访问量 1350

猜你喜欢

转载自blog.csdn.net/qq_44534541/article/details/105460819
今日推荐