-1

J'ai une vue recycleur extensible qui ont des parents et des éléments enfants comme ceci.Afficher l'image Id intead de l'image dans android

enter image description here

Je suis en train d'ajouter une image avec tous les noms de fichier en utilisant comme ce code:

data.add(new ExpandableListAdapter.Item(ExpandableListAdapter.CHILD, obj1.optString("category").trim()+" "+R.drawable.download48)); 
    data.add(new ExpandableListAdapter.Item(ExpandableListAdapter.CHILD, obj1.optString("filename").trim())); 

Mais il imprime l'ID d'image (zone rouge cerclé) au lieu de l'image réelle. Comment imprimer ici l'image réelle?

Voici mon code d'adaptateur:

public class ExpandableListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    public static final int HEADER = 0; 
    public static final int CHILD = 1; 

    private List<Item> data; 

    public ExpandableListAdapter(List<Item> data) { 
     this.data = data; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) { 
     View view = null; 
     Context context = parent.getContext(); 
     float dp = context.getResources().getDisplayMetrics().density; 
     int subItemPaddingLeft = (int) (18 * dp); 
     int subItemPaddingTopAndBottom = (int) (5 * dp); 
     LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     switch (type) { 
      case HEADER: 

       view = inflater.inflate(R.layout.list_header, parent, false); 
       ListHeaderViewHolder header = new ListHeaderViewHolder(view); 
       return header; 
      case CHILD: 
       view = inflater.inflate(R.layout.listchild, parent, false); 
       ListChildViewHolder child = new ListChildViewHolder(view); 
       return child; 
     } 
     return null; 
    } 

    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     final Item item = data.get(position); 
     switch (item.type) { 
      case HEADER: 
       final ListHeaderViewHolder itemController = (ListHeaderViewHolder) holder; 
       itemController.refferalItem = item; 
       itemController.header_title.setText(item.text); 
       if (item.invisibleChildren == null) { 
        itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus); 
       } else { 
        itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus); 
       } 
       itemController.btn_expand_toggle.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (item.invisibleChildren == null) { 
          item.invisibleChildren = new ArrayList<Item>(); 
          int count = 0; 
          int pos = data.indexOf(itemController.refferalItem); 
          while (data.size() > pos + 1 && data.get(pos + 1).type == CHILD) { 
           item.invisibleChildren.add(data.remove(pos + 1)); 
           count++; 
          } 
          notifyItemRangeRemoved(pos + 1, count); 
          itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus); 
         } else { 
          int pos = data.indexOf(itemController.refferalItem); 
          int index = pos + 1; 
          for (Item i : item.invisibleChildren) { 
           data.add(index, i); 
           index++; 
          } 
          notifyItemRangeInserted(pos + 1, index - pos - 1); 
          itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus); 
          item.invisibleChildren = null; 
         } 
        } 
       }); 
       break; 
      case CHILD: 




       final ListChildViewHolder itemController1 = (ListChildViewHolder) holder; 
       itemController1.refferalItem1 = item; 
       itemController1.header_title1.setText(item.text); 



       break; 
     } 
    } 


    @Override 
    public int getItemViewType(int position) { 
     return data.get(position).type; 
    } 

    @Override 
    public int getItemCount() { 
     return data.size(); 
    } 

    private static class ListHeaderViewHolder extends RecyclerView.ViewHolder { 
     public TextView header_title; 
     public ImageView btn_expand_toggle; 
     public Item refferalItem; 

     public ListHeaderViewHolder(View itemView) { 
      super(itemView); 
      header_title = (TextView) itemView.findViewById(R.id.header_title); 
      btn_expand_toggle = (ImageView) itemView.findViewById(R.id.btn_expand_toggle); 
     } 
    } 
    private static class ListChildViewHolder extends RecyclerView.ViewHolder { 
     public TextView header_title1; 
     public ImageView btn_expand_toggle1; 
     public Item refferalItem1; 

     public ListChildViewHolder(View itemView) { 
      super(itemView); 
      header_title1 = (TextView) itemView.findViewById(R.id.header_title1); 
      btn_expand_toggle1 = (ImageView) itemView.findViewById(R.id.btn_expand_toggle1); 
     } 
    } 
    public static class Item { 
     public int type; 
     public String text; 
     public List<Item> invisibleChildren; 

     public Item() { 
     } 

     public Item(int type, String text) { 
      this.type = type; 
      this.text = text; 
     } 
    } 
} 

Si toute autre information nécessaire, s'il vous plaît demander.

+0

Do u besoin nom de l'image? ou Image? – user3515851

+0

vous n'avez jamais utilisé 'btn_expand_toggle1' dans votre code sauf pour l'initialiser –

+1

Vous devez passer les identifiants de ressources dans des méthodes appropriées, pas comme des arguments String aléatoires. 'str2 +" "+ R.drawable.download48' –

Répondre

1

case CHILD de votre méthode onBindViewHolder() devrait ressembler à ceci

case CHILD: 
     final ListChildViewHolder itemController1 = (ListChildViewHolder) holder; 
     itemController1.refferalItem1 = item; 
     itemController1.header_title1.setText(item.text); 
     itemController1.btn_expand_toggle1.setImageResource(item.resId); 
     break; 

Et votre classe Item devrait être quelque chose comme ceci:

public static class Item { 
    public int type; 
    public String text; 
    private int resId; 
    public List<Item> invisibleChildren; 

    public Item() { 
    } 

    public Item(int type, String text, @DrawableRes int resId) { 
     this.type = type; 
     this.text = text; 
     this.resId = resId; 
    } 
} 

Et lors de l'initialisation, il devrait être

data.add(new ExpandableListAdapter.Item(ExpandableListAdapter.CHILD, obj1.optString("category").trim(), R.drawable.download48)); 
+0

Il n'affiche rien ..bro .. – Adi

+0

puis fournir votre fichier de disposition pour enfant –

+0

Comment? parce que le même adpater ont imprimer le nom de fichier et la catégorie à la fois.et je veux afficher l'image avec le nom de fichier seulement – Adi

1

Ajouter cette ligne

btn_expand_toggle1.setImageDrawable(getResources().getDrawab‌​le(R.drawable.ic_lau‌​ncher)); 

après

final ListChildViewHolder itemController1 = (ListChildViewHolder) holder; 
itemController1.refferalItem1 = item; 
itemController1.header_title1.setText(item.text); 

Il travaillera

+0

Cela vous aide-t-il? – user3515851

+0

s'il vous plaît attendre ..... – Adi

+0

Afficher l'erreur avec "setImageDrawable (getResources" – Adi