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);
就会出错