android中ExpandableListView 使用自定义Adapter的方法

小鸟 在学习的过程中使用了各种的方法,基本可以成功的,在listview的基础上,ExpandableListView没什么难度

但是在使用自定义的Adapter的时候 有些变化了

数据的设置时候

        ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);
        // List<maindata> listc=new ArrayList<maindata>();
                
        List<Map<String, String>> maps = new ArrayList<Map<String, String>>();
        Map<String, String> mp1 = new HashMap<String, String>();
        mp1.put("title", "1");
        mp1.put("num", "1");
        mp1.put("status", "正常");
        maps.add(mp1);
        Map<String, String> mp2 = new HashMap<String, String>();
        mp2.put("title", "2");
        mp2.put("num", "2");
        mp2.put("status", "正常");
        maps.add(mp2);
        Map<String, String> mp3 = new HashMap<String, String>();
        mp3.put("title", "3");
        mp3.put("num", "3");
        mp3.put("status", "正常");
        maps.add(mp3);
        List<Map<String, String>> childs = new ArrayList<Map<String, String>>();
        Map<String, String> child1 = new HashMap<String, String>();
        child1.put("childtv", "child");
        childs.add(child1);
        Map<String, String> child2 = new HashMap<String, String>();
        child2.put("childtv", "child");
        childs.add(child2);
        Map<String, String> child3 = new HashMap<String, String>();
        child3.put("childtv", "child");
        childs.add(child3);

        List<Map<String, String>> childs2 = new ArrayList<Map<String, String>>();
        Map<String, String> child12 = new HashMap<String, String>();
        child12.put("childtv", "child");
        childs2.add(child1);

        List<Map<String, String>> childs3 = new ArrayList<Map<String, String>>();
        Map<String, String> child13 = new HashMap<String, String>();
        child13.put("childtv", "child");
        childs3.add(child3);
        Map<String, String> child23 = new HashMap<String, String>();
        child23.put("childtv", "child");
        childs3.add(child3);
        List<List<Map<String, String>>> childss = new ArrayList<List<Map<String, String>>>();
        childss.add(childs);
        childss.add(childs2);
        childss.add(childs3);
        SimpleExpandableListAdapter se = new SimpleExpandableListAdapter(this,
                maps, R.layout.groupitem, new String[] { "title", "num",
                        "status" }, new int[] { R.id.title, R.id.num,
                        R.id.status }, childss, R.layout.childitem,
                new String[] { "childtv" }, new int[] { R.id.childtv });
        elv.setAdapter(se);

这样的方式 是没有问题的

但是我用adapter的时候,仿照listview的自定义adapter中的getview方法写,就显示不出来了

    public View getView(int position, View convertView, ViewGroup parent) {
        View view;

        if (convertView != null){
             view = convertView;
         }
        else{
            view=inflater.inflate(R.layout.item,null);
        }                
        TextView tv1 = (TextView) view .findViewById(R.id.title);
        tv1.setText(listc.get(position).getTitle());
        TextView tv2 = (TextView) view .findViewById(R.id.num);
        tv1.setText(listc.get(position).getNum());
        TextView tv3 = (TextView) view .findViewById(R.id.status);
        tv1.setText(listc.get(position).getStatus());
        return view;
    }

后来发现 在写getview的时候,换一种方式

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent)
{
@SuppressWarnings("unchecked")
String text = ((Map<String, String>) getChild(groupPosition, childPosition)).get("child");
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//获取二级列表对应的布局文件, 并将其各元素设置相应的属性
LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.child, null);
TextView tv = (TextView) linearLayout.findViewById(R.id.childTo);
tv.setText(text);
ImageView imageView = (ImageView)linearLayout.findViewById(R.id.imageView01);
imageView.setImageResource(R.drawable.abc);

return linearLayout;
}


public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
String text = groups.get(groupPosition).get("group");
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//获取一级列表布局文件,设置相应元素属性
LinearLayout linearLayout = (LinearLayout) layoutInflater.inflate(R.layout.group, null);
TextView textView = (TextView)linearLayout.findViewById(R.id.textView01);
textView.setText(text);

return linearLayout;
}

不适用View的时候 就成功了。。。关键是

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

如果是使用

    this.inflater = LayoutInflater.from(activity); 

就会出错

posted @ 2012-10-23 17:06  Tammie-锴  阅读(1081)  评论(0编辑  收藏  举报