Android支持展开/收缩功能的列表控件

最近在做一个Rss阅读器,看了下别人做的阅读器中的列表控件可以展开、收缩,我就在网上搜索了一下。下面就我找到的一个小例子,给大家分享一下。

 

ActivityMain .java

 

Java代码   收藏代码
  1. package study.com.android;  
  2.    
  3. import android.app.ExpandableListActivity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.MenuItem;  
  7. import android.view.View;  
  8. import android.view.ContextMenu.ContextMenuInfo;  
  9. import android.widget.ExpandableListAdapter;  
  10. import android.widget.ExpandableListView;  
  11. import android.widget.TextView;  
  12. import android.widget.Toast;  
  13. import android.widget.ExpandableListView.ExpandableListContextMenuInfo;  
  14.    
  15. public class ActivityMain extends ExpandableListActivity {  
  16.    
  17.     private ExpandableListAdapter mAdapter;  
  18.    
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         this.setTitle("ExpandableList");  
  23.         mAdapter = new MyExpandableListAdapter(this);  
  24.         setListAdapter(mAdapter);  
  25.         registerForContextMenu(this.getExpandableListView());  
  26.     }  
  27.    
  28.     // 为列表的每一项创建上下文菜单(即长按后 呼出的菜单)  
  29.     @Override  
  30.     public void onCreateContextMenu(ContextMenu menu, View v,  
  31.             ContextMenuInfo menuInfo) {  
  32.         menu.setHeaderTitle("ContexMenu");  
  33.         menu.add(000"ContextMenu");  
  34.     }  
  35.    
  36.     // 单击上下文菜单后的逻辑  
  37.     @Override  
  38.     public boolean onContextItemSelected(MenuItem item) {  
  39.    
  40.         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item  
  41.                 .getMenuInfo();  
  42.         String title = ((TextView) info.targetView).getText().toString();  
  43.    
  44.         int type = ExpandableListView  
  45.                 .getPackedPositionType(info.packedPosition);  
  46.         if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {  
  47.    
  48.             int groupPos = ExpandableListView  
  49.                     .getPackedPositionGroup(info.packedPosition);  
  50.             int childPos = ExpandableListView  
  51.                     .getPackedPositionChild(info.packedPosition);  
  52.             Toast.makeText(  
  53.                     this,  
  54.                     title + "-Group Index" + groupPos + "Child Index:"  
  55.                             + childPos, Toast.LENGTH_SHORT).show();  
  56.             return true;  
  57.         }  
  58.         return false;  
  59.     }  
  60. }  

 MyExpandableListAdapter.java

Java代码   收藏代码
  1. package study.com.android;  
  2.    
  3. import android.content.Context;  
  4. import android.view.Gravity;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.AbsListView;  
  8. import android.widget.BaseExpandableListAdapter;  
  9. import android.widget.TextView;  
  10.    
  11. public class MyExpandableListAdapter extends BaseExpandableListAdapter {  
  12.    
  13.     private Context mContext;  
  14.    
  15.     // 父列表数据  
  16.     private String[] groups = { "group1""group2""group3""group4""" };  
  17.    
  18.     // 子列表数据  
  19.     private String[][] children = { { "child1" }, { "child1""child2" },  
  20.             { "child1""child2""child3" },  
  21.             { "child1""child2""child3""child4" }, };  
  22.    
  23.     MyExpandableListAdapter(Context context) {  
  24.         mContext = context;  
  25.     }  
  26.    
  27.     @Override  
  28.     public Object getChild(int groupPosition, int childPosition) {  
  29.         // TODO Auto-generated method stub  
  30.         return children[groupPosition][childPosition];  
  31.     }  
  32.    
  33.     @Override  
  34.     public long getChildId(int groupPosition, int childPosition) {  
  35.         // TODO Auto-generated method stub  
  36.         return childPosition;  
  37.     }  
  38.    
  39.     // 取子列表中的某一项的view  
  40.     @Override  
  41.     public View getChildView(int groupPosition, int childPosition,  
  42.             boolean isLastChild, View convertView, ViewGroup parent) {  
  43.         TextView textView = getGenericView();  
  44.         ;  
  45.         textView.setText(getChild(groupPosition, childPosition).toString());  
  46.         return textView;  
  47.     }  
  48.    
  49.     @Override  
  50.     public int getChildrenCount(int groupPosition) {  
  51.         // TODO Auto-generated method stub  
  52.         return children[groupPosition].length;  
  53.     }  
  54.    
  55.     @Override  
  56.     public Object getGroup(int groupPosition) {  
  57.         return groups[groupPosition];  
  58.     }  
  59.    
  60.     @Override  
  61.     public int getGroupCount() {  
  62.         // TODO Auto-generated method stub  
  63.         return groups.length;  
  64.     }  
  65.    
  66.     @Override  
  67.     public long getGroupId(int groupPosition) {  
  68.         // TODO Auto-generated method stub  
  69.         return groupPosition;  
  70.     }  
  71.    
  72.     @Override  
  73.     public View getGroupView(int groupPosition, boolean isExpanded,  
  74.             View convertView, ViewGroup parent) {  
  75.         TextView textView = getGenericView();  
  76.         textView.setText(getGroup(groupPosition).toString());  
  77.    
  78.         return textView;  
  79.     }  
  80.    
  81.     @Override  
  82.     public boolean hasStableIds() {  
  83.         // TODO Auto-generated method stub  
  84.         return true;  
  85.     }  
  86.    
  87.     @Override  
  88.     public boolean isChildSelectable(int groupPosition, int childPosition) {  
  89.         // TODO Auto-generated method stub  
  90.         return true;  
  91.     }  
  92.    
  93.     // 获取某一项的view的逻辑  
  94.     private TextView getGenericView() {  
  95.         AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  
  96.                 ViewGroup.LayoutParams.FILL_PARENT, 48);  
  97.         TextView textView = new TextView(mContext);  
  98.         textView.setLayoutParams(lp);  
  99.         textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);  
  100.         textView.setPadding(32000);  
  101.         return textView;  
  102.     }  
  103.    
  104. }  

 运行的结果如下:

 

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值