-1

У меня есть расширяемый вид ресайклера, в котором есть некоторые родительские и некоторые дочерние элементы.Отобразить изображение Идентификатор изображения в андроиде

enter image description here

Я пытаюсь добавить изображение с каждым именем файла, используя как этот код:

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

Но он печатает идентификатор изображения (красный кружком область) вместо фактического изображения. Как напечатать здесь фактическое изображение?

Вот мой адаптер код:

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

Если какая-либо другая информация необходима, пожалуйста, спрашивайте.

+0

Нужна ли у имени изображения? или изображение? – user3515851

+0

вы никогда не использовали 'btn_expand_toggle1' в своем коде, за исключением его инициализации. –

+1

Вы должны передавать идентификаторы ресурсов в соответствующие методы, а не как случайные аргументы String. 'str2 +" "+ R.drawable.download48' –

ответ

1

onBindViewHolder() Ваш метода case CHILD должен выглядеть примерно так

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

А ваш класс Item должно быть что-то вроде этого:

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

И при инициализации должно быть

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

Это ничего не отображает ..bro .. – Adi

+0

затем предоставить ваш файл макета для ребенка –

+0

Как? потому что тот же adpater имеет имя и категорию файлов для печати. ​​И я хочу отображать только изображение с именем файла – Adi

1

Добавьте эту строку

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

после

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

Он будет работать

+0

Помогает ли это вам? – user3515851

+0

, пожалуйста, подождите ..... – Adi

+0

Показаны ошибки с помощью «setImageDrawable (getResources» – Adi

Смежные вопросы