国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ExpandableListView單選以及多選實現代碼

2019-10-21 21:49:45
字體:
來源:轉載
供稿:網友

一、概述

ExpandableListView是常用的一個控件,今天自己做了個小練習,主要需求是單選以及多選的實現,看似比較簡單,但是還是比較復雜,把代碼貼給大家,有這種需求的可以參考一下。  

二、效果截圖

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;   } } 

四、總結及注意點

1、設置CheckBox的點擊事件,而非別的

2、exListView.collapseGroup(groupPosition); 關閉正展開的子ListView.

這是demo地址,歡迎下載:

Demo下載地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭阳县| 太湖县| 深圳市| 邢台县| 万州区| 平泉县| 石楼县| 滦南县| 东安县| 民勤县| 泗水县| 叶城县| 全南县| 宜章县| 渭南市| 马边| 图片| 油尖旺区| 讷河市| 长丰县| 六安市| 惠州市| 克东县| 改则县| 赫章县| 阜阳市| 德钦县| 双牌县| 西盟| 扬中市| 运城市| 九龙坡区| 米脂县| 页游| 锡林浩特市| 新乡县| 竹北市| 元谋县| 贞丰县| 和龙市| 乳源|