欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android ExpandableListView單選以及多選實(shí)現(xiàn)代碼

 更新時(shí)間:2021年08月23日 09:21:00   作者:不年少還青春  
這篇文章主要為大家詳細(xì)介紹了Android ExpandableListView單選以及多選的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、概述

ExpandableListView是常用的一個(gè)控件,今天自己做了個(gè)小練習(xí),主要需求是單選以及多選的實(shí)現(xiàn),看似比較簡(jiǎn)單,但是還是比較復(fù)雜,把代碼貼給大家,有這種需求的可以參考一下。

二、效果截圖

三、實(shí)現(xiàn)過(guò)程

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是為了去除重復(fù)值 
   */ 
  private HashSet<String> hashSet; 
 
  private void setListener() 
  { 
    exListView.setOnGroupExpandListener(new OnGroupExpandListener() 
    { 
       
      @Override 
      public void onGroupExpand(int groupPosition) 
      { 
        //存取已選定的集合 
        hashSet = new HashSet<String>(); 
      } 
    }); 
    // ExpandableListView的Group的點(diǎn)擊事件 
    exListView.setOnGroupClickListener(new OnGroupClickListener() 
    { 
 
      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, 
          int groupPosition, long id) 
      { 
        // 可以寫點(diǎn)擊后實(shí)現(xiàn)的功能 
         
        return false; 
      } 
    }); 
    // ExpandableListView的child的點(diǎn)擊事件 
 
    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("選定的長(zhǎng)度==1" + hashSet.size()); 
        System.out.println("選定的長(zhǎng)度==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; 
      } 
    }); 
  } 
 
  // 初始化數(shù)據(jù) 
  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的點(diǎn)擊事件 
       */ 
      holder.groupBox.setOnClickListener(new OnClickListener() 
      { 
 
        @Override 
        public void onClick(View v) 
        { 
          CheckBox groupBox = (CheckBox) v 
              .findViewById(R.id.id_group_checkbox); 
          if (!isExpanded) 
          { 
            //展開某個(gè)group view 
            exListView.expandGroup(groupPosition); 
          } else 
          { 
            //關(guān)閉某個(gè)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; 
  } 
} 

四、總結(jié)及注意點(diǎn)

1、設(shè)置CheckBox的點(diǎn)擊事件,而非別的

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

這是demo地址,歡迎下載:

Demo下載地址

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android使用EditText小技巧匯總

    Android使用EditText小技巧匯總

    這篇文章主要介紹了Android使用EditText的小技巧匯總,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-05-05
  • Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable

    Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable

    這篇文章主要介紹了Android中的傳遞有兩個(gè)方法,一個(gè)是Serializable,另一個(gè)是Parcelable,對(duì)intent傳遞對(duì)象的兩種方法感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • Android中webview使用的一些坑

    Android中webview使用的一些坑

    這篇文章主要給大家介紹了關(guān)于Android中webview使用的一些坑,通過(guò)一下總結(jié)的這些內(nèi)容,對(duì)大家學(xué)習(xí)或者使用webview具有一定的參考學(xué)習(xí)價(jià)值,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • Android中Service與Activity之間通信的幾種方式

    Android中Service與Activity之間通信的幾種方式

    本篇文章主要介紹了Android中Service與Activity之間通信的幾種方式,Activity主要負(fù)責(zé)前臺(tái)頁(yè)面的展示,Service主要負(fù)責(zé)需要長(zhǎng)期運(yùn)行的任務(wù),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-02-02
  • 淺談Android Content Provider的使用

    淺談Android Content Provider的使用

    本篇文章小編為大家介紹,Android Content Provider的使用。需要的朋友參考下
    2013-04-04
  • Android 下載并打開PDF,Doc,Dwg文檔實(shí)例

    Android 下載并打開PDF,Doc,Dwg文檔實(shí)例

    本篇文章主要介紹了Android 下載并打開PDF,Doc,Dwg文檔實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • Android開發(fā)之自帶下載器DownloadManager的使用示例代碼

    Android開發(fā)之自帶下載器DownloadManager的使用示例代碼

    本篇文章主要介紹了Android開發(fā)之自帶下載器DownloadManager的使用示例代碼,Android自帶的DownloadManager是一個(gè)很好的下載文件的工具,有興趣的可以了解一下。
    2017-03-03
  • Android中微信小程序開發(fā)之彈出菜單

    Android中微信小程序開發(fā)之彈出菜單

    這篇文章主要介紹了Android中微信小程序開發(fā)之彈出菜單的相關(guān)資料,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2016-12-12
  • Android獲取LinearLayout的寬度和高度示例代碼

    Android獲取LinearLayout的寬度和高度示例代碼

    這篇文章主要介紹了android獲取LinearLayout的寬度和高度,如果想直接獲取在布局文件中定義的組件的寬度和高度,可以直接使用View.getLayoutParams().width和View.getLayoutParams().height,本文結(jié)合示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Android實(shí)現(xiàn)帶動(dòng)畫效果的可點(diǎn)擊展開TextView

    Android實(shí)現(xiàn)帶動(dòng)畫效果的可點(diǎn)擊展開TextView

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶動(dòng)畫效果的可點(diǎn)擊展開TextView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論