【问题标题】:Display image Id instead of image in Android在Android中显示图像ID而不是图像
【发布时间】:2016-11-19 10:23:10
【问题描述】:

我有一个可扩展的回收器视图,其中有一些父项和一些子项,就像这样。

我正在尝试使用以下代码添加每个文件名的图像:

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

但它会打印图像 id(红色圆圈区域)而不是实际图像。如何在此处打印实际图像?

这是我的适配器代码:

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

【问题讨论】:

  • 你需要图片名称吗?还是图片?
  • 除了初始化之外,您从未在代码中使用过btn_expand_toggle1
  • 您应该将资源 ID 传递给适当的方法,而不是作为随机字符串参数。 str2+" "+R.drawable.download48
  • 我想要图片@user3515851
  • 是的..我使用了 btn_expand_toggle1 ..但它不起作用..所以我正在尝试不同的方式..看到这个@Jimit Patel stackoverflow.com/questions/40676178/…

标签: android android-recyclerview android-arrayadapter android-imageview android-image


【解决方案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));

【讨论】:

  • 然后为孩子提供您的布局文件
  • 怎么样?因为同一个 adpater 有打印文件名和类别。我只想显示带有文件名的图像
  • 这只是一个例子。逻辑是你会放的东西。
【解决方案2】:

添加这一行

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

会有用的

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多