/*本例与接下来的两个demo演示了可伸缩列表ExpandableList的用法,着重演示的要为ExpandableList
* 设置数据适配器的三种情况。本例演示的是通过继承BaseExpandableListAdapter类来自定义数据适配器。
* 为简便起见直接使用了ExpandableListActivity*/
public class MainActivity extends ExpandableListActivity {
private ExpandableListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter=new MyExpandableListAdapter();
setListAdapter(mAdapter);
//为ExpandListView注册上下文菜单(长按View时触发)
registerForContextMenu(getExpandableListView());
}
//创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
//设置标题
menu.setHeaderTitle("Sample View");
//添加子菜单项
menu.add(0, 0, 0, "SampleAction");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
//获取可伸缩列表的上下文菜单的信息
ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo) item.getMenuInfo();
//targetView:点击ExpandableListView的某个条目时展示上下文菜单的View(也就是点击的那个条目)
String title=((TextView)menuInfo.targetView).getText().toString();
//获取伸缩列表中所选项的类型(group或child)
int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);
if(type==ExpandableListView.PACKED_POSITION_TYPE_CHILD){
int groupPos=ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
int childPos=ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);
Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,
Toast.LENGTH_SHORT).show();
return true;
}else if(type==ExpandableListView.PACKED_POSITION_TYPE_GROUP){
int groupPos=ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
private class MyExpandableListAdapter extends BaseExpandableListAdapter {
// 定义数据源
private String[] groups = { "People Names", "Dog Names", "Cat Names",
"Fish Names" };
private String[][] children = {
{ "Arnold", "Barry", "Chuck", "David" },
{ "Ace", "Bandit", "Cha-Cha", "Deuce" },
{ "Fluffy", "Snuggles" }, { "Goldy", "Bubbles" } };
@Override
public int getGroupCount() {
return groups.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length;
}
@Override
public String getGroup(int groupPosition) {
return groups[groupPosition];
}
@Override
public String getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// 是否有稳定的Id,如果有则会根据id来决定列表中数据的显示顺序
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// 获取一个通过的TextView用于显示Group的数据
TextView tv = getGenericView();
tv.setText(groups[groupPosition]);
return tv;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// 获取一个通过的TextView用于显示child的数据
TextView tv = getGenericView();
tv.setText(children[groupPosition][childPosition]);
return tv;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
// 定义一个通用的TextView
private TextView getGenericView() {
// AbsListView用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 64);
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
// 设置文本的开始位置
textView.setPaddingRelative(36, 0, 0, 0);
//textView.setPaddingRelative(72, 0, 0, 0);
// 设置文本的排列方式
textView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
//textView.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
return textView;
}
}
}
07-02
07-02
07-02
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交