Android:ExpandableListView(拡張可能なListView)使用詳細;
5507 ワード
まず効果を見ると、多くのappが似たような機能を使っていることがわかります.もし最もよく使われているのは私たちのQQチャットソフトであれば、友达のグループはExpandableListViewで実現することができます.
ExpandableListViewはListViewのサブクラスです.
ExpandableListViewとListViewの使い方は同じです.
同様にadapterを設定する必要があります.
唯一の違いは、ListViewがデータのセットを設定する必要があることです.一方、ExpandableListViewでは、グループビューとサブビューの2つのデータを設定する必要があります.
では、まずExpandAbleListAdapterについて説明します.
ListView Adapterより少し面倒です.
まず、グループビューのラベル総数、ID、コンテンツ、サブビューのラベル総数、ID、コンテンツを設定する必要があります.また、位置を指定する必要があります.
最後に、getGroup View()メソッドとgetChildView()メソッドでグループビューとサブビューを設定します.
方法が面倒だと感じているのではないでしょうか.でも、使うのも簡単です.
たとえば、getGroup Id()、getChildId()は、BaseAdapterのgetItemId()メソッドと同様に管理されません.
hasStableIds(),getGroupCount(),getGroup(),getChildrenCount(),getChild();この5つの方法はBaseAdapterのgetCount()の方法と差が少なく、固定的な書き方であり、非常に簡単である.
唯一のコードが多いgetGroup View()は、getChildView()とBaseAdapterのgetViewの使い方がそっくりです.
瞬間的に違和感があるのではないでしょうか.具体的なコードを見てみましょう.
次に、ExpandableListViewにadapterを直接設定すればいいです.
ExpandableListViewには2つのビューがあるので、エントリクリックイベントも2つあります.それぞれ、グループビューのitemクリックイベント、サブビューのitemクリックイベントです
クリックしてリンクを開けて無料でソースをダウンロードします
ExpandableListViewはListViewのサブクラスです.
ExpandableListViewとListViewの使い方は同じです.
同様にadapterを設定する必要があります.
唯一の違いは、ListViewがデータのセットを設定する必要があることです.一方、ExpandableListViewでは、グループビューとサブビューの2つのデータを設定する必要があります.
では、まずExpandAbleListAdapterについて説明します.
ListView Adapterより少し面倒です.
まず、グループビューのラベル総数、ID、コンテンツ、サブビューのラベル総数、ID、コンテンツを設定する必要があります.また、位置を指定する必要があります.
最後に、getGroup View()メソッドとgetChildView()メソッドでグループビューとサブビューを設定します.
方法が面倒だと感じているのではないでしょうか.でも、使うのも簡単です.
たとえば、getGroup Id()、getChildId()は、BaseAdapterのgetItemId()メソッドと同様に管理されません.
hasStableIds(),getGroupCount(),getGroup(),getChildrenCount(),getChild();この5つの方法はBaseAdapterのgetCount()の方法と差が少なく、固定的な書き方であり、非常に簡単である.
唯一のコードが多いgetGroup View()は、getChildView()とBaseAdapterのgetViewの使い方がそっくりです.
瞬間的に違和感があるのではないでしょうか.具体的なコードを見てみましょう.
class MyExpandableListAdapter extends BaseExpandableListAdapter {
@Override
//
public int getGroupCount() {
return countryTypes.length;
}
@Override
// ID
public long getGroupId(int groupPosition) {
return 0;
}
@Override
//
public Object getGroup(int groupPosition) {
return countryTypes[groupPosition];
}
@Override
//
public int getChildrenCount(int groupPosition) {
return childNames[groupPosition].length;
}
@Override
// ID
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
//
public Object getChild(int groupPosition, int childPosition) {
return childNames[groupPosition][childPosition];
}
@Override
//
public boolean hasStableIds() {
return true;
}
@Override
//
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupHolder groupHolder;
if (convertView == null) {
convertView = View.inflate(context,R.layout.group_item,null);
groupHolder = new GroupHolder();
groupHolder.tv = (TextView)convertView.findViewById(R.id.textview);
groupHolder.iv= (ImageView) convertView.findViewById(R.id.imageview);
convertView.setTag(groupHolder);
} else {
groupHolder = (GroupHolder)convertView.getTag();
}
if(isExpanded){
//
groupHolder.tv.setText(getGroup(groupPosition).toString()+" ------ ↓");
}else {
groupHolder.tv.setText(getGroup(groupPosition).toString()+" ------ ↑");
}
return convertView;
}
@Override
/**
*
*
* @param groupPosition
* @param childPosition
* @param isLastChild
* @param convertView (View)
* @param parent (View)
*/
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ItemHolder itemHolder;
if(convertView==null){
convertView=View.inflate(context,R.layout.child_item,null);
itemHolder=new ItemHolder();
itemHolder.tv= (TextView) convertView.findViewById(R.id.textview);
itemHolder.iv= (ImageView) convertView.findViewById(R.id.imageview);
convertView.setTag(itemHolder);
}else {
itemHolder= (ItemHolder) convertView.getTag();
}
itemHolder.tv.setText(getChild(groupPosition,childPosition).toString());
itemHolder.iv.setBackgroundResource(childImageIds[groupPosition][childPosition]);
return convertView;
}
@Override
// ,
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
次に、ExpandableListViewにadapterを直接設定すればいいです.
elv= (ExpandableListView) findViewById(R.id.expandable_listview);
adapter = new MyExpandableListAdapter();
elv.setAdapter(adapter);
ExpandableListViewには2つのビューがあるので、エントリクリックイベントも2つあります.それぞれ、グループビューのitemクリックイベント、サブビューのitemクリックイベントです
// item
elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
ToastUtils.showToast(context,countryTypes[groupPosition]);
return false;
}
});
// item
elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {
ToastUtils.showToast(context,childNames[groupPosition][childPosition]);
return false;
}
});
クリックしてリンクを開けて無料でソースをダウンロードします