最近想要优化XSuperSMS,在网上搜索了列表控件的展开和收缩,找到一个小例子,给大家分享一下。
ActivityMain .java
package study.com.android;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
public class ActivityMain extends ExpandableListActivity {
private ExpandableListAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("ExpandableList");
mAdapter = new MyExpandableListAdapter(this);
setListAdapter(mAdapter);
registerForContextMenu(this.getExpandableListView()); }
// 为列表的每一项创建上下文菜单(即长按后 呼出的菜单)
@Override
public void onCreateContextMenu(ContextMenu menu, View vContextMenuInfo menuInfo) {
menu.setHeaderTitle("ContexMenu");
menu.add(0, 0, 0, "ContextMenu"); }
// 单击上下文菜单后的逻辑
@Override
public boolean onContextItemSelected(MenuItem item) {
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
String title = ((TextView) info.targetView).getText().toString();
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
Toast.makeText(this,title + "-Group Index" + groupPos + "Child Index:"+ childPos, Toast.LENGTH_SHORT).show();return true;}
return false; }}
MyExpandableListAdapter.java
package study.com.android;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
// 父列表数据
private String[] groups = { "group1", "group2", "group3", "group4", "" };
// 子列表数据
private String[][] children = { { "child1" }, { "child1", "child2" },{ "child1", "child2", "child3" },{ "child1", "child2", "child3", "child4" }, };
MyExpandableListAdapter(Context context) { mContext = context; }
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return children[groupPosition][childPosition]; }
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition; }
// 取子列表中的某一项的view
@Override
public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getChild(groupPosition, childPosition).toString());
return textView; }
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return children[groupPosition].length; }
@Override
public Object getGroup(int groupPosition) {
return groups[groupPosition]; }
@Override public int getGroupCount() {
// TODO Auto-generated method stub
return groups.length; }
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition; }
@Override
public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString()); return textView; }
@Override public boolean hasStableIds() {
// TODO Auto-generated method stub
return true; }
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true; }
// 获取某一项的view的逻辑
private TextView getGenericView() {
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 48);
TextView textView = new TextView(mContext);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setPadding(32, 0, 0, 0);
return textView; }}
列表控件的展开与收缩
最新推荐文章于 2022-09-14 10:56:32 发布