ExpandableListView

1. 二级列表(ExpandableListView)

①创建布局并找控件
②获取数据:网络数据、死数据
创建适配器:10个方法必须掌握
④设置适配器
⑤父项、子项的点击事件
setOnChildClickListener//单击子选项
setOnGroupClickListener//单击组选项
⑥ExpandableListView的基本属性
divider 这个属性用于设置父选项之间的分割线样式
childDivider 自选项之间分割样式
dividerHeight 用于设置分割线的高度
groupIndicator 这个属性是用于控制父项前面的小箭头用的

ExpandableListView适配器的10个方法
     //父项目的个数
    @Override
    public int getGroupCount() {
        return list.size();
    }
    //某个父项的子项的个数
    @Override
    public int getChildrenCount(int groupPosition) {
        return list.get(groupPosition).getChildren().size();
    }
    //获得某个父项
    @Override
    public Object getGroup(int groupPosition) {
        return list.get(groupPosition);
    }
    //获得某个子项
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return list.get(groupPosition).getChildren().get(childPosition);
    }
    //父项的id
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
    //子项的id
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }
    //获得父项的view
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        convertView= LayoutInflater.from(context).inflate(R.layout.layout_group,null);
        TextView tv_group = convertView.findViewById(R.id.tv_group);
        tv_group.setText(list.get(groupPosition).getName());
        return convertView;
    }
    //获得子项的view
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        convertView= LayoutInflater.from(context).inflate(R.layout.layout_child,null);
        TextView tv_child = convertView.findViewById(R.id.tv_child);
        tv_child.setText(list.get(groupPosition).getChildren().get(childPosition).getName());
        return convertView;
    }
     //子项是否可选中,如果要设置子项的点击事件,需要返回true
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

2. ListView手动、自动加载更多

⑴ListView

①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器

ListView优化:
⑴对convertView进行复用
⑵使用ViewHolder减少findViewById的查找

⑵ListView手动加载更多

①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤给ListView添加一个Footer
⑥点击footer中的button加载更多:page++,获取数据

 View footer = LayoutInflater.from(this).inflate(R.layout.button, null);
        Button btn_add = footer.findViewById(R.id.btn_add);
        lv.addFooterView(footer);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                page++;
                initData();
                adapter.notifyDataSetChanged();
            }
        });

⑶ListView自动加载更多

①创建布局并找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤定义一个变量isBottom表示是否滑到底部
ListView设置滑动监听

lv.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (isBottom){
                    page++;
                    initData();
                    isBottom=false;
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (totalItemCount>0&&totalItemCount==firstVisibleItem+visibleItemCount){
                    isBottom=true;
                }else {
                    isBottom=false;
                }
            }
        });

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容