擴展下拉列表ExpandableListView(一)

今天來研究下ExpandableListView這個組件,首先來了解下這是神馬

可擴展的下拉列表即一個正常的ListView,當我們點擊其中的某一項時他會出現一個包含另一個ListView的下拉列表,說簡單點就是在一個ListView中還有一個ListView,我畫了個圖來說明一下,而且是個很難看的圖。。


點開之後變成
好,大概就是這樣,嚴肅點,不要笑。。
主佈局文件main.xml就放個ExpandableListView就行,Demo嘛
<ExpandableListView 
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ></ExpandableListView>
然後建一個xml佈局,畫上圖父1父2父3(學名叫組),相當與這個大的listview的item項,我只放了個TextVIew
<TextView
        android:id="@+id/group_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
然後再建個xml,繪製上圖的子1子2子3佈局,就是裏面小listView的item
<ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
<TextView
   android:id="@+id/child_text"
   android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
目前這三個佈局就夠用了
在MainActivity中定義這個ExpandableListView並setAdapter
ExpandableListView list = (ExpandableListView) findViewById(R.id.list);
list.setAdapter(adapter);
寫一個adapter繼承BaseExpandableListAdapter,可以用數組或者集合存儲我們要展示的內容
int[] images = {R.drawable.img_1,R.drawable.img_2,R.drawable.img_3};
        String[] Father= new String[]{"父1","小說","遊戲"};
        String[][] son= new String[][]{{"子1","子2"},{"鬥破蒼穹","武動乾坤"},{"LOL","DNF"}};
我感覺不太推薦用數組,不過這個例子很簡單,就拿數組存了(話說有人看鬥破嗎,我最愛看的小說,已經看過不下10遍了)
我們要重寫一堆方法啊啊啊
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// 是否選中指定位置上的子元素
return true;
}

@Override
public boolean hasStableIds() {
// 組和子元素是否持有穩定的ID,也就是底層數據的改變不會影響到它們。
return true;
}
//決定每個組選項外觀
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
 //趕時間,先不用viewHolder了,大家自己加上
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list_group, null);
TextView group_text = (TextView) convertView.findViewById(R.id.group_text);
group_text.setText(getGroup(groupPosition).toString());
return convertView;
}
//組的position
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
//組的數量
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return father.length;
}
//獲得某一個組
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return father[groupPosition];
}
//子的數量
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return son[groupPosition].length;
}
//每個子選項外觀
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//趕時間,先不用viewHolder了,大家自己加上
View convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_list_child, null);
ImageView image = (ImageView) convertView.findViewById(R.id.image);
TextView child_text = (TextView) convertView.findViewById(R.id.child_text);
image.setBackgroundResource(image[childPosition]);
child_text.setText(getChild(groupPosition, childPosition).toString());
return convertView;
}
//子的position
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
}
//獲取指定子的數據
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return son[groupPosition][childPosition];
}
};
這樣一個簡單的ExpandableListView就實現了,還有一些東西下次在加,有事先閃。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章