如果我使用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);
}
});
}
}
答案 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);
}