• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android ExpandableListView相关介绍

Android ExpandableListView相关介绍

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了expandablelistview,xexpandablelistview,android相关技术介绍,android相关书籍,android相关技术等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android ExpandableListView相关介绍


一、ExpandableListView介绍

    一个垂直滚动的显示两个级别(Child,Group)列表项的视图,列表项来自ExpandableListAdapter 。组可以单独展开。

  1.重要方法

      expandGroup(int groupPos) :在分组列表视图中展开一组,

      setSelectedGroup(int groupPosition) :设置选择指定的组。

      setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。

      getPackedPositionGroup(long packedPosition) :返回所选择的组

      getPackedPositionForChild(int groupPosition, int childPosition) :返回所选择的子项

      getPackedPositionType(long packedPosition) :返回所选择项的类型(Child,Group)

      isGroupExpanded(int groupPosition) :判断此组是否展开

 

ExpandableListAdapter

    一个接口,将基础数据链接到一个ExpandableListView。此接口的实施将提供访问Child的数据(由组分类),并实例化的Child和Group。

  1.重要方法

    getChildId(int groupPosition, int childPosition)获取与在给定组给予孩子相关的数据。

    getChildrenCount(int groupPosition) 返回在指定Group的Child数目。


2.上代码

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    private List groupData;
    private List> childrenData;
    private Context context;

    public MyExpandableListAdapter(Context context, List groupData, List> childrenData) {
        this.context = context;
        this.groupData = groupData;
        this.childrenData = childrenData;
    }

    @Override
    public int getGroupCount() {
        return groupData.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return childrenData.get(i).size();
    }

    @Override
    public Object getGroup(int i) {
        return groupData.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return childrenData.get(i).get(i1);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean b, View convertView, ViewGroup viewGroup) {
        GroupHolder groupHolder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_head, null);
            groupHolder = new GroupHolder();
            groupHolder.txt = (TextView) convertView.findViewById(R.id.txt);
            convertView.setTag(groupHolder);
        } else {
            groupHolder = (GroupHolder) convertView.getTag();
        }
        groupHolder.txt.setText(groupData.get(groupPosition));
        return convertView;
    }


    @Override
    public View getChildView(int groupPosition, int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        ItemHolder itemHolder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_child, null);
            itemHolder = new ItemHolder();
            itemHolder.tv_mes = (TextView) convertView.findViewById(R.id.tv_mes);
            convertView.setTag(itemHolder);
        } else {
            itemHolder = (ItemHolder) convertView.getTag();
        }
        itemHolder.tv_mes.setText(childrenData.get(groupPosition).get(
                childPosition));
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

    class GroupHolder {
        public TextView txt;
    }

    class ItemHolder {
        public TextView tv_mes;
    }
}
3.MainActivity的代码
public class MainActivity extends Activity implements  ExpandableListView.OnChildClickListener {

    private List groupArray;
    private List> childArray;
    private ExpandableListView expandableListView;
    private MyExpandableListAdapter mMyExpandableListAdapter;

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

    private void initData() {
        //随便一堆测试数据
        groupArray = new ArrayList();
        groupArray.add("A");
        groupArray.add("B");
        groupArray.add("C");


        List item_list1 = new ArrayList();
        item_list1.add("1");
        item_list1.add("2");
        item_list1.add("3");

        List item_list2 = new ArrayList();
        item_list2.add("4");
        item_list2.add("5");
        item_list2.add("6");

        List item_list3 = new ArrayList();
        item_list3.add("7");
        item_list3.add("8");
        item_list3.add("9");

        childArray = new ArrayList>();

        childArray.add(item_list1);
        childArray.add(item_list2);
        childArray.add(item_list3);

        mMyExpandableListAdapter = new MyExpandableListAdapter(MainActivity.this, groupArray, childArray);
        expandableListView.setAdapter(mMyExpandableListAdapter);
        for (int i = 0; i < mMyExpandableListAdapter.getGroupCount(); i++) {//展开所有父分组
            expandableListView.expandGroup(i);
        }
    }

    private void initView() {
        expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        expandableListView.setOnChildClickListener(this);
    }

    @Override
    public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {
        Toast.makeText(MainActivity.this, "点击了" + childArray.get(groupPosition).get(childPosition), Toast.LENGTH_SHORT).show();
        return true;
    }
}
效果如图
\

4.expandableListview它是如何定义长按事件的呢?

  1. @Override
  2. publicbooleanonItemLongClick(AdapterViewarg0,Viewview,intpos,longid){
  3. //pos不可用说明见下文returnfalse;
  4. }

    如果这个方法是用在ListView长按事件中刚刚好,但在ExpandableListView中,第三个参数pos不能区分开点击的是父项还是子项,以及哪个父项或子项。

    在ExpandableListView响应的onItemLongCkick方法中,pos参数值为:从上到下,父项+展现的子项到点击位置的数目(注意:是展现的,隐藏的子项不包括,从0开始)。

    例如:

    父项1(隐藏3个子项)

    父项2

    |—子项2-0

    |—子项2-1

    |—子项2-2

    长按子项2-1时,pos值为3。显然根据pos值是无法确定点击的是哪个子项或父项的。

    因此依赖pos是很难处理点击位置的。

    如果可以直接在onItemLongClick方法中获取groupPos,及childPos该多好呢?

    下面我就来所说有几种方法:

    1.这种方法是通过下标来找到位置,

      @Override  
        public boolean onItemLongClick(AdapterView arg0, View view,  
                int pos, long id) {  
          
    
    
    
     
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP),expandablelistview
  • Android中使用ExpandableListView实现好友分组,expandablelistview
  • 可展开的列表组件——ExpandableListView深入解析,expandablelist展开
  • 安卓开发树形控件之ExpandableListView(一),expandablelistview
  • Android ExpandableListView相关介绍
  • 【原创】Android ExpandableListView使用,expandablelistview

相关文章

  • 2017-05-26两个Service之间相互监视的实现,两个service监视
  • 2017-05-26Android Studio下运行开源项目9GAG遇到的问题
  • 2017-05-26硅谷新闻3--使用Android系统自带的API解析json数据,androidjson
  • 2017-05-26缓存之 ACache
  • 2017-05-26Android网络编程使用HttpClient访问web站点
  • 2017-05-26我的Android进阶之旅------Android 5.0中出现警告的解决方法: Service Intent must be explicit:
  • 2017-05-26开源图表库MPAndroidChart使用介绍之饼状图&amp;折线图&amp;柱状图,图表mpandroidchart
  • 2017-05-26Android--音乐播放器
  • 2017-05-26android开发中fragment获取context,androidfragment
  • 2017-05-26多线程中使用curl致coredump问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android http下载视频到指定目录,android目录
    • UI篇(初识君面),ui初识君面
    • android adb pull push,androidadb
    • Android动画解析(一)—— Frame Animation(帧动画)
    • android 打造炫酷导航栏(仿UC头条)
    • Android 6.0 Phone"通话显示"查询流程
    • 手机游戏渠道SDK接入工具项目分享(二)万事开头难,手机游戏sdk
    • Android GZIP压缩IO流,优化APP数据传输(一),androidapp
    • Android高效加载大图、多图解决方案,有效避免程序OOM,androidoom
    • android 4.2 系统以后的飞行模式,android4.2

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有