温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Android中利用ExpandableListView实现单选和多选

发布时间:2021-05-24 18:07:26 来源:亿速云 阅读:230 作者:Leah 栏目:移动开发

这期内容当中小编将会给大家带来有关怎么在Android中利用ExpandableListView实现单选和多选,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >      <ExpandableListView      android:id="@+id/exlistview"      android:layout_width="match_parent"      android:layout_height="match_parent"      android:listSelector="@android:color/transparent" >    </ExpandableListView>    </LinearLayout>

group_item.xml

<?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:descendantFocusability="blocksDescendants"    android:padding="10dp" >      <TextView      android:id="@+id/id_group_text"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_centerVertical="true"      android:layout_marginLeft="10dp"      android:padding="10dp"      android:text="hao"      android:textColor="@android:color/black"      android:textIsSelectable="true"      android:textSize="15sp" >    </TextView>      <CheckBox      android:id="@+id/id_group_checkbox"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentRight="true"      android:layout_centerVertical="true" />    </RelativeLayout>

listview_item.xml

<?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:descendantFocusability="blocksDescendants"    android:padding="10dp" >      <TextView      android:id="@+id/id_text"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_centerVertical="true"      android:padding="10dp"      android:layout_marginLeft="30dp"      android:textColor="#55acac"      android:textIsSelectable="true"      android:textSize="15sp" >    </TextView>      <CheckBox      android:id="@+id/id_checkbox"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:clickable="false"      android:layout_alignParentRight="true"      android:layout_centerVertical="true" />    </RelativeLayout>

 MainAcitivity.java

public class MainActivity extends Activity {    private List<Map<String, String>> parentList = new ArrayList<Map<String, String>>();    private List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();    private ExpandableListView exListView;    private Context context = this;    private MyAdapter adapter;      @Override    protected void onCreate(Bundle savedInstanceState)    {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);      initView();      initData();      setListener();    }      /**     * 记录正在选中的子listview的item条目 用hashset是为了去除重复值     */    private HashSet<String> hashSet;      private void setListener()    {      exListView.setOnGroupExpandListener(new OnGroupExpandListener()      {                @Override        public void onGroupExpand(int groupPosition)        {          //存取已选定的集合          hashSet = new HashSet<String>();        }      });      // ExpandableListView的Group的点击事件      exListView.setOnGroupClickListener(new OnGroupClickListener()      {          @Override        public boolean onGroupClick(ExpandableListView parent, View v,            int groupPosition, long id)        {          // 可以写点击后实现的功能                    return false;        }      });      // ExpandableListView的child的点击事件        exListView.setOnChildClickListener(new OnChildClickListener()      {          @Override        public boolean onChildClick(ExpandableListView parent, View v,            int groupPosition, int childPosition, long id)        {          Map<String, String> map = childData.get(groupPosition).get(              childPosition);          String childChecked = map.get("isChecked");          if ("No".equals(childChecked))          {            map.put("isChecked", "Yes");            hashSet.add("选定" + childPosition);          } else          {            map.put("isChecked", "No");            if (hashSet.contains("选定" + childPosition))            {              hashSet.remove("选定" + childPosition);            }          }          System.out.println("选定的长度==1" + hashSet.size());          System.out.println("选定的长度==2"              + childData.get(groupPosition).size());          if (hashSet.size() == childData.get(groupPosition).size())          {            parentList.get(groupPosition).put("isGroupCheckd", "Yes");          } else          {            parentList.get(groupPosition).put("isGroupCheckd", "No");          }          adapter.notifyDataSetChanged();          return false;        }      });    }      // 初始化数据    private void initData()    {      for (int i = 0; i < 10; i++)      {        Map<String, String> groupMap = new HashMap<String, String>();        groupMap.put("groupText", "item" + i);        groupMap.put("isGroupCheckd", "No");        parentList.add(groupMap);      }      for (int i = 0; i < 10; i++)      {        List<Map<String, String>> list = new ArrayList<Map<String, String>>();        for (int j = 0; j < 4; j++)        {          Map<String, String> map = new HashMap<String, String>();          map.put("childItem", "childItem" + j);          map.put("isChecked", "No");          list.add(map);        }        childData.add(list);      }      adapter = new MyAdapter();      exListView.setAdapter(adapter);      exListView.expandGroup(0);      hashSet = new HashSet<String>();    }      private void initView()    {      exListView = (ExpandableListView) findViewById(R.id.exlistview);    }      /**     * 适配adapter     */      private class MyAdapter extends BaseExpandableListAdapter {      @Override      public Object getChild(int groupPosition, int childPosition)      {        // TODO Auto-generated method stub        return childData.get(groupPosition).get(childPosition);      }        @Override      public long getChildId(int groupPosition, int childPosition)      {        // TODO Auto-generated method stub        return childPosition;      }        @Override      public View getChildView(int groupPosition, int childPosition,          boolean isLastChild, View convertView, ViewGroup parent)      {          ViewHolder holder = null;        if (convertView == null)        {          holder = new ViewHolder();          convertView = View.inflate(context, R.layout.listview_item,              null);          holder.childText = (TextView) convertView              .findViewById(R.id.id_text);          holder.childBox = (CheckBox) convertView              .findViewById(R.id.id_checkbox);          convertView.setTag(holder);        } else        {          holder = (ViewHolder) convertView.getTag();        }        holder.childText.setText(childData.get(groupPosition)            .get(childPosition).get("childItem"));        String isChecked = childData.get(groupPosition).get(childPosition)            .get("isChecked");        if ("No".equals(isChecked))        {          holder.childBox.setChecked(false);        } else        {          holder.childBox.setChecked(true);        }        return convertView;      }        @Override      public int getChildrenCount(int groupPosition)      {        // TODO Auto-generated method stub        return childData.get(groupPosition).size();      }        @Override      public Object getGroup(int groupPosition)      {        return parentList.get(groupPosition);      }        @Override      public int getGroupCount()      {        // TODO Auto-generated method stub        return parentList.size();      }        @Override      public long getGroupId(int groupPosition)      {        // TODO Auto-generated method stub        return groupPosition;      }        @Override      public View getGroupView(final int groupPosition,          final boolean isExpanded, View convertView, ViewGroup parent)      {        ViewHolder holder = null;        if (convertView == null)        {          holder = new ViewHolder();          convertView = View.inflate(context, R.layout.group_item, null);          holder.groupText = (TextView) convertView              .findViewById(R.id.id_group_text);          holder.groupBox = (CheckBox) convertView              .findViewById(R.id.id_group_checkbox);          convertView.setTag(holder);        } else        {          holder = (ViewHolder) convertView.getTag();        }        holder.groupText.setText(parentList.get(groupPosition).get(            "groupText"));        final String isGroupCheckd = parentList.get(groupPosition).get(            "isGroupCheckd");          if ("No".equals(isGroupCheckd))        {          holder.groupBox.setChecked(false);        } else        {          holder.groupBox.setChecked(true);        }              /*         * groupListView的点击事件         */        holder.groupBox.setOnClickListener(new OnClickListener()        {            @Override          public void onClick(View v)          {            CheckBox groupBox = (CheckBox) v                .findViewById(R.id.id_group_checkbox);            if (!isExpanded)            {              //展开某个group view              exListView.expandGroup(groupPosition);            } else            {              //关闭某个group view              exListView.collapseGroup(groupPosition);            }              if ("No".equals(isGroupCheckd))            {              exListView.expandGroup(groupPosition);              groupBox.setChecked(true);              parentList.get(groupPosition).put("isGroupCheckd",                  "Yes");              List<Map<String, String>> list = childData                  .get(groupPosition);              for (Map<String, String> map : list)              {                map.put("isChecked", "Yes");              }            } else            {              groupBox.setChecked(false);              parentList.get(groupPosition)                  .put("isGroupCheckd", "No");              List<Map<String, String>> list = childData                  .get(groupPosition);              for (Map<String, String> map : list)              {                map.put("isChecked", "No");              }            }            notifyDataSetChanged();          }        });        return convertView;      }        @Override      public boolean hasStableIds()      {        return true;      }        @Override      public boolean isChildSelectable(int groupPosition, int childPosition)      {        return true;      }      }      private class ViewHolder {      TextView groupText, childText;      CheckBox groupBox, childBox;    }  }

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

上述就是小编为大家分享的怎么在Android中利用ExpandableListView实现单选和多选了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI