在recylclerView上声明ImageView(无法解析方法)

时间:2018-01-05 15:39:41

标签: android android-studio imageview

我想在回收站视图中对图像视图进行delcare,但我在“green =(ImageView)findViewById(R.id.statecolorG)”行中遇到了“FindViewById”方法的问题;“

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<Requete> items;
    private RecyclerView recyclerView;
    private int itemLayout;
    private ImageView green;


    public RecyclerViewAdapter(List<Requete> items, int itemLayout) {
        this.items = items;
        this.itemLayout = itemLayout;
    }
public void update(List<Requete> nimp)
{
    items.clear();
    items.addAll(nimp);
    notifyDataSetChanged();
}
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Requete item = items.get(position);
        ViewHolder vh = (ViewHolder)holder;
        vh.primaryText.setText(Integer.toString(item.getState()));
        vh.primaryText.setText(item.getserviceName());
        vh.data = item;
        green = (ImageView) findViewById(R.id.statecolorG);
    }

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

    public static class ViewHolder extends SwipeToAction.ViewHolder<Requete>{
        public TextView primaryText;

        public ViewHolder(View itemView) {
            super(itemView);
            primaryText = (TextView) itemView.findViewById(R.id.titleItem);
        }

    }

也许这个位置错了?

3 个答案:

答案 0 :(得分:2)

1)你永远不应该在onBindViewHolder中调用findViewById。 viewHolder的目的是保存所有这些视图。它应该在ViewHolder的构造函数中完成。

2)适配器没有findViewById功能,因为它不是一个视图组。您可能希望在ViewHolder构造函数中的itemView上调用它。

答案 1 :(得分:1)

在视图持有者类

中声明您的图像视图
    public static class ViewHolder extends SwipeToAction.ViewHolder<Requete>{
        public TextView primaryText;

        public ViewHolder(View itemView) {
            super(itemView);
            primaryText = (TextView) itemView.findViewById(R.id.titleItem);
            green = (ImageView) itemView.findViewById(R.id.statecolorG);

       }

答案 2 :(得分:0)

您无法调用findViewById,因为它不是RecyclerView适配器上的函数,也不应该在适配器内声明ImageView。它应该在您的ViewHolder中声明,然后在itemView上调用findViewById(),就像使用TextView一样,并将引用分配给&#39; green&#39; ImageView变量。注意:具有id&#39; statecolorG&#39;的ImageView必须在相同的布局文件中声明&#39; item_view.xml&#39;你在onCreateViewHolder里面膨胀。