expandablelistview

第一种:

1.main.xml中设置ExpandableListView的格式,其中id使用android自带的list

  android:id="@id/android:list"

  设置TextView,用于显示无数据时的布局。id使用android自带的empty

  android:id="@id/android:empty"

2.新建一个group.xml,这个布局文件用于控制一级条目的格式

  <TextView
   android:id="@+id/groupTo"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:paddingLeft="60px"
   android:paddingTop="10px"
   android:paddingBottom="10px"
   android:textSize="26sp"
   android:text="no data"
   />

3.新建一个child.xml,这个布局文件用于控制二级条目的格式

    <TextView
   android:id="@+id/childTo"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:paddingLeft="50px"
   android:paddingTop="5px"
   android:paddingBottom="5px"
   android:textSize="20sp"
   android:text="no data"
   />

4.正文来了哟~~

  •   定义一个List,该List对象为一级条目提供数据 
      List<Map<String,String>> groups = new ArrayList<Map<String,String>>();
      Map<String,String> Ts = new HashMap<String,String>();
      Ts.put("group", "Ts");
      Map<String,String> Ps = new HashMap<String,String>();
      Ps.put("group", "Ps");
      groups.add(Ts);
      groups.add(Ps);
            

  •   定义一个List,该List对象为第一个一级条目提供二级条目的数据
      List<Map<String,String>> tts = new ArrayList<Map<String,String>>();
      Map<String,String> tt1 = new HashMap<String,String>();
      tt1.put("tp","small gui");
      tts.add(tt1);
      Map<String,String> tt2 = new HashMap<String,String>();
      tt2.put("tp","wang ye");
      tts.add(tt2);
            

  •   定义一个List,该List对象为第二个一级条目提供二级条目的数据
      List<Map<String,String>> pps = new ArrayList<Map<String,String>>();
      Map<String,String> pp1 = new HashMap<String,String>();
      pp1.put("tp", "small wan");
      pps.add(pp1);
      Map<String,String> pp2 = new HashMap<String,String>();
      pp2.put("tp", "wang fei");
      pps.add(pp2);
            

  •   定义一个List,该List对象用于存储所有二级条目的数据
      List<List<Map<String,String>>> tps = new ArrayList<List<Map<String,String>>>();
      tps.add(tts);
      tps.add(pps);
            

  •      
       SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter(
        this, groups, R.layout.group, new String[] { "group" },
        new int[] { R.id.groupTo }, tps, R.layout.child,
        new String[] { "tp" }, new int[] { R.id.childTo });

 

  •    将SimpleExpandableListAdapter对象设置给当前的ExpandableListAdapter
       setListAdapter(sela);

 expandablelistview


第二种:
1.main.xml中建立ExpandableListView
<ExpandableListView
android:id="@+id/expandlist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
这里是+id哦~
2.创建一个BaseExpandableListAdapte r对象,这个对象,很磅礴。。。
ExpandableListAdapter adapter = new BaseExpandableListAdapte r(){这里东西n多}
3.{}里的内容
  • 两个图片数组,一个放group的图片,一个放child的图片
                int[] types = new int[]{
          R.drawable.t,
          R.drawable.p,
          R.drawable.h
          };
          int[][] leses = new int[][]{
          {R.drawable.sg,
          R.drawable.wy,
          R.drawable.gg},
          {R.drawable.xm,
          R.drawable.mg,
          R.drawable.gm},
          {R.drawable.ed,
          R.drawable.mm}
          };
  • 两个字符数组,一个放group的文字,一个放child的文字
          private String[] lesTypes = new String[]{
          "Ts","Ps","Hs"
          };
          private String[][] tph = new String[][]{
          {"小鬼","王爷","滚妹"},{"修满","梦姑","国美"},{"二蛋","沐沐"}
          };
  • 四个和group相关的方法
        @Override
        public Object getGroup(int groupPosition) {
          return lesTypes[groupPosition];
        }
        @Override
public int getGroupCount() {
return lesTypes.length;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
LinearLayout ll = new LinearLayout(expandlistview.this);
//setOrientation,参数为0的话,图片和文字会到中间
ll.setOrientation(0);
//加图片
ImageView les = new ImageView(expandlistview.this);
les.setImageResource(types[groupPosition]);
ll.addView(les);
//加文字
TextView textView = getTextView();
textView.setText(getChild(groupPosition,childPosition).toString());
ll.addView(textView);
return ll;
}
  • 四个跟child有关的方法,与上面类似
@Override
public Object getChild(int groupPosition, int childPosition) {
return tph[groupPosition][childPosition];
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
return tph[groupPosition].length;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
LinearLayout cl = new LinearLayout(expandlistview.this);
cl.setOrientation(0);
ImageView les = new ImageView(expandlistview.this);
les.setImageResource(leses[groupPosition][childPosition]);
cl.addView(les);
TextView textView = getTextView();
textView.setText(getChild(groupPosition,childPosition).toString());
cl.addView(textView);
return cl;
}
  • group和child都用到了的一个控制文字格式的方法,具体的每行的意思。。。有些不懂。。。
        private TextView getTextView(){
AbsListView.LayoutParams lp = new                 AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(expandlistview.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
textView.setPadding(36, 0, 0, 0);
textView.setTextSize(20);
return textView;
}
  • 还有两个方法,看名字就知道意思了
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int arg0, int arg1) {
return true;
}

expandablelistview

expandablelistview

对比:
第一种方法,将group和child的格式直接在.xml文件中定义好,而数据通过List提供,灵活性强。
第二种方法,在代码中绘制group和child,觉得。。。比较繁琐,而且代码果然没看懂。但第二种实现了加图片。下一步,试试看把第二种加图片的方法加入到第一种的代码里。。。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值