<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/expandable_listView_item_group_tv" android:text="123" android:textSize="20dp" android:gravity="center" android:layout_margin="3dp" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/expandable_listView_item_group_iv" android:background="@drawable/img2" android:layout_margin="10dp" android:layout_width="40dp" android:layout_height="40dp"/> <TextView android:id="@+id/expandable_listView_item_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Group 1 Item 1" android:textSize="24dp"/> </LinearLayout>
private ArrayList<String> groupData;//存儲Group 信息 ArrayList<ArrayList<Item>> allItems; //以Group 爲單位,存儲Items ArrayList<Item> items; //每一個組
//初始化組信息 groupData=new ArrayList<>(); groupData.add("Group1"); groupData.add("Group2"); groupData.add("Group3"); allItems=new ArrayList<>(); //Group1 items =new ArrayList<>(); items.add(new Item("I am the group 1 Item1",R.drawable.img1)); items.add(new Item("I am the group 1 Item2",R.drawable.img1)); items.add(new Item("I am the group 1 Item3",R.drawable.img1)); allItems.add(items); //將每組數據添加到總集合當中 //Group2 items=new ArrayList<>(); items.add(new Item("I am the group 2 Item1",R.drawable.img2)); items.add(new Item("I am the group 2 Item2",R.drawable.img2)); items.add(new Item("I am the group 2 Item3",R.drawable.img2)); allItems.add(items); //Group3 items=new ArrayList<>(); items.add(new Item("I am the group 3 Item1",R.drawable.img3)); items.add(new Item("I am the group 3 Item2",R.drawable.img3)); items.add(new Item("I am the group 3 Item3",R.drawable.img3)); allItems.add(items); listView=(ExpandableListView)findViewById(R.id.expandableList_lv); //爲ListView設置adapter MyBaseExpandableAdapter adapter=new MyBaseExpandableAdapter(this,groupData,allItems); listView.setAdapter(adapter); //爲列表設置點擊事件 listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText(ExpandableListViewActivity.this, "你點擊了:" + allItems.get(groupPosition).get(childPosition).getText(),Toast.LENGTH_SHORT).show(); return true; } });
BaseExpandableListAdapter 與 BaseAdapter不一樣是 getGroupView和 getChildViewjava
須要重寫 isChildSelectable,要否則不會觸發 子Item的點擊事件。android
class MyBaseExpandableAdapter extends BaseExpandableListAdapter{ private ArrayList<String> groupData; private ArrayList<ArrayList<Item>> itemData; private Context mContext; public MyBaseExpandableAdapter(Context context, ArrayList<String> groupData,ArrayList<ArrayList<Item>> itemData) { this.mContext=context; this.groupData=groupData; this.itemData=itemData; } @Override public int getGroupCount() { return groupData.size(); } @Override public int getChildrenCount(int i) { return itemData.get(i).size(); } @Override public Object getGroup(int i) { return groupData.get(i); } @Override public Object getChild(int i, int i1) { return itemData.get(i).get(i1); } @Override public long getGroupId(int i) { return i; } @Override public long getChildId(int i, int i1) { return i1; } @Override public boolean hasStableIds() { return false; } //獲取顯示分組的視圖 @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { ViewHolderGroup viewHolderGroup; if(view==null){ view=View.inflate(mContext,R.layout.expandableview_group_layout,null); viewHolderGroup=new ViewHolderGroup(); viewHolderGroup.tv_group_name=(TextView)view.findViewById(R.id.expandable_listView_item_group_tv); view.setTag(viewHolderGroup); }else{ viewHolderGroup=(ViewHolderGroup)view.getTag(); } viewHolderGroup.tv_group_name.setText(groupData.get(i)); return view; } //獲取Item視圖 @Override public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { ViewHolderItem viewHolderItem; if(view==null){ view=View.inflate(mContext,R.layout.expandablelistview_item_layout,null); viewHolderItem=new ViewHolderItem(); viewHolderItem.tv_name=(TextView)view.findViewById(R.id.expandable_listView_item_tv); viewHolderItem.img_icon=(ImageView)view.findViewById(R.id.expandable_listView_item_group_iv); view.setTag(viewHolderItem); }else { viewHolderItem=(ViewHolderItem)view.getTag(); } viewHolderItem.tv_name.setText(itemData.get(i).get(i1).getText()); viewHolderItem.img_icon.setImageResource(itemData.get(i).get(i1).getImageId()); return view; } // 設置子列表是否能夠選中 @Override public boolean isChildSelectable(int i, int i1) { return true; } private class ViewHolderGroup{ private TextView tv_group_name; } private class ViewHolderItem{ private ImageView img_icon; private TextView tv_name; }
class Item{ private String text; private int imageId; public Item(String text, int imageId) { this.text = text; this.imageId = imageId; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } public String getText() { return text; } public void setText(String text) { this.text = text; } }