如何在Android中扩展可扩展列表?

时间:2011-11-21 17:13:18

标签: android list android-activity expandable

如果我使用albumCovers.get(i)代替getResources().getDrawable(R.drawable.icon),我想在每行上展开一个可扩展列表,其中包含一些不同的文字和不同的图像,然后它会抛出错误,任何人都会帮助我们吗?谢谢; p。

public class ExpandActivity extends ExpandableListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Construct Expandable List
    final String NAME = "name";
    final String IMAGE = "image";
    final LayoutInflater layoutInflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>();

    final HashMap<String, String> group1 = new HashMap<String, String>();
    group1.put(NAME, "Group 1");
    headerData.add(group1);

    final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>();

    final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>();
    childData.add(group1data);

    Resources res = this.getResources();
    Drawable photo = (Drawable) res.getDrawable(R.drawable.icon);
    ArrayList<Drawable> albumCovers = new ArrayList<Drawable>();
    albumCovers.add(photo);
    // Set up some sample data in both groups
    for (int i = 0; i < 10; ++i) {
        final HashMap<String, Object> map = new HashMap<String, Object>();
        map.put(NAME, "Child " + i);
        map.put(IMAGE, getResources().getDrawable(R.drawable.icon));
        (group1data).add(map);
    }

    setListAdapter(new SimpleExpandableListAdapter(this, headerData,
            android.R.layout.simple_expandable_list_item_1,
            new String[] { NAME }, // the name of the field data
            new int[] { android.R.id.text1 }, // the text field to populate
                                                // with the field data
            childData, 0, null, new int[] {}) {
        @Override
        public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
            final View v = super.getChildView(groupPosition, childPosition,
                    isLastChild, convertView, parent);

            // Populate your custom view here
            ((TextView) v.findViewById(R.id.name))
                    .setText((String) ((Map<String, Object>) getChild(
                            groupPosition, childPosition)).get(NAME));
            ((ImageView) v.findViewById(R.id.image))
                    .setImageDrawable((Drawable) ((Map<String, Object>) getChild(
                            groupPosition, childPosition)).get(IMAGE));

            return v;
        }

        @Override
        public View newChildView(boolean isLastChild, ViewGroup parent) {
            return layoutInflater.inflate(
                    R.layout.expandable_list_item_with_image, null, false);
        }
    });
}
}

1 个答案:

答案 0 :(得分:2)

您在albumCovers中只有一个可绘制,但在for循环中将其循环十次,并尝试通过索引访问它。将albumCovers.get(i)更改为albumCovers.get(0)以使其生效。

以下是关键位置:

Drawable photo = (Drawable) res.getDrawable(R.drawable.icon); 
ArrayList<Drawable> albumCovers = new ArrayList<Drawable>();
albumCovers.add(photo); // HERE: photo added only once!

for (int i = 0; i < 10; ++i) {
    final HashMap<String, Object> map = new HashMap<String, Object>();
    map.put(NAME, "Child " + i);
    map.put(IMAGE, getResources().getDrawable(R.drawable.icon)); // HERE: you wanted to use albumCovers.get(i) here. There is only 1 photo in albumCovers but you try to get images 0...9 from it using index i. So, change this to albumCovers.get(0) OR add 10x photo into albumCovers.
    (group1data).add(map);
}