2011-11-21 4 views
0

je veux gonfler une liste extensible avec du texte différent et des images différentes sur chaque ligne si j'utilise albumCovers.get(i) au lieu de getResources().getDrawable(R.drawable.icon) alors il se produit une erreur, quelqu'un peut-il nous aider? merci, p.Comment gonfler une liste extensible dans Android?

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); 
     } 
    }); 
} 
} 

Répondre

2

Vous avez seulement un drawable en albumCovers mais en boucle dix fois dans la boucle et essayer d'y accéder par l'index. Remplacez albumCovers.get(i) par albumCovers.get(0) pour que cela fonctionne.

Voici l'emplacement clé:

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); 
} 
+1

thats un bon point verrryyy lol u m'a sauvé beaucoup de pisser au sujet grâce; p –