• 转载 android 支持展开/收缩功能的列表控件


    ActivityMain .java

    package 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 v,
       ContextMenuInfo 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 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;
     }
     
    }

    运行的结果如下:

  • 相关阅读:
    css 两边是线,中间文字的多种实现方法
    vue provide/inject 父组件如何给孙子组件传值
    Mac版本的 Axure rp8 不显示菜单栏
    mac 如何卸载node和npm采坑之旅
    css3 鼠标悬停图片动画
    css3 一个六边形 和 放大旋转动画DEMO演示
    js drag drop 收藏夹拖拽移除的简单例子
    css 折角效果/切角效果
    css 给图片添加滤镜效果,透明层毛玻璃效果
    c# udp通讯实现
  • 原文地址:https://www.cnblogs.com/xiao0/p/2170233.html
Copyright © 2020-2023  润新知