代码之家  ›  专栏  ›  技术社区  ›  RiM

如何在适配器中使用毕加索,而不使用片段中的上下文

  •  0
  • RiM  · 技术社区  · 7 年前

    当我尝试在我的 碎片 我得到错误:

    类适配器中的构造函数适配器不能应用于给定类型; 必需:上下文、列表(<);列表项(>,OnItemClickListener

    我在适配器中声明了我的上下文,如下所示:

     private Context mContext;
    

    然后我初始化了上下文:

     public MyAdapter(Context context,List<ListItem> listItems, OnItemClickListener callback) {
        this.listItems = listItems;
        this.callback = callback;
        this.mContext = context;
    
    }
    

    并已使用 mContext 使用毕加索在onBindViewHolder中获取我的imageurl

     @Override
            public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
                ListItem listItem = listItems.get(position);
    
         Picasso.with(mContext).load(listItem.getImageurl()).into(holder.imageUrl;
    
            }
    

    但现在我似乎无法在片段中使用此上下文。

    这就是我尝试过的:在我的 碎片 :

    //发生错误

     adapter = new MyAdapter(this,listItems);
    

    所以我尝试了这个:

    //仍然获取错误

      adapter = new MyAdapter(getContext(),this);
    

    我也尝试了getActivity,但仍然出现错误

    adapter = new MyAdapter(getActivity());
    

    我哪里做错了? 我真正想做的就是在我的listfragment中显示图像,但我不知道如何使用Picasso和using context,MyAdapter不需要context才能正常工作。我一直在使用它,但没有声明上下文,数据显示正确。Onclick也在工作并显示来自firebase的字符串,但现在我需要使用毕加索将来自firebase的图像显示到我的listfragment中。除了我片段中的这行代码外,其他一切都正常工作:

    adapter=新的MyAdapter(getActivity());
    
    4 回复  |  直到 7 年前
        1
  •  2
  •   Tung Tran    7 年前

    尝试从中的任何视图对象获取上下文 Holder 。 示例:

    mContext = holder.imageView.getContext()
    
        2
  •  1
  •   Hasan Bou Taam    7 年前

    在适配器初始化中,传递2个参数,但构造函数需要3个参数。

    因此,请尝试使用3个参数进行初始化:

       adapter=new MyAdapter(getContext(), listItems, this);
    

    getContext()=片段的上下文。

    lisItems=您的列表。

    这=是您的单击接口侦听器(请确保您在片段中实现了侦听器)。

        3
  •  1
  •   a23sokolov    7 年前

    试试这个,我想你忘了上次的争论

    OnItemClickListener listener = OnItemClickListener {
        void onItemClick(int position) {
            //some code
        }
    }
    adapter = new MyAdapter(this, listItems, listener);
    
        4
  •  1
  •   Asutosh Panda    7 年前

    片段在活动中膨胀。

    1. 在片段中,您可以使用活动的上下文,也可以使用整个应用程序的上下文。
    2. 此外,您还错过了在适配器中传递另一个参数,即单击侦听器。

    像这样定义适配器-

    OnItemClickListener mOnItemClickListener = OnItemClickListener {
        void onItemClick(int position) {
    
        }
    }
    
    adapter = new MyAdapter(getActivity(), listItems, mOnItemClickListener);
    

    adapter = new MyAdapter(getActivity().getApplicationContext(), listItems, mOnItemClickListener);
    
    推荐文章