“无法解析符号ItemClickListener”

时间:2019-01-19 17:01:03

标签: java android onitemclicklistener

我可以知道为什么显示“无法解析符号ItemClickListener”错误吗?我是否需要添加库或其他东西来解决此问题,或者我不应该在这里声明它?

public static class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    private ItemClickListener itemClickListener;

    public void setItemClickListener(ItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    View view;
    public FoodViewHolder (View v){
        super(v);
        view= v;
    }
    public void setName(String title){
        TextView post_title = (TextView)view.findViewById(R.id.Menu_Name);
        post_title.setText(title);
    }
    public void setImage(Context ctx, String image){
        ImageView menuImage = (ImageView) view.findViewById(R.id.Menu_Image);
        Picasso.with(ctx).load(image).into(menuImage);
    }

    @Override
    public void onClick(View v) {

    }
}

2 个答案:

答案 0 :(得分:1)

通常对于RecyclerView,我们创建一个接口来处理点击事件。与普通的按钮单击不同,RecyclerView Click事件不能直接处理。由于RecyclerView是Adapter(视图的数据提供者),因此您不能直接处理从此处单击的项目单击并更新视图。为此,您需要一个单独的接口(在您的情况下为ItemClickListener)(在项目中单独创建一个接口文件)。在该接口中,您需要声明一个类似这样的方法

public Interface ItemClickListener{
     void onRecyclerViewItemClicked(int position);
}

为您的View创建一个OnClickListener(显示在单行中。例如:图像,文本等); @ Override

public void onBindViewHolder(ViewHolder holder, int position) {
    holder.myText.setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View view) {
         itemClickListener.onRecyclerViewItemClicked(position);
         //itemClickListener is the Interface Reference Variable
    }
});
}

在您的“活动”中,您需要像这样实现该接口

public class YourActivity extends AppCompatActivity implements ItemClickListener {
     ....
     ....
     protected void onCreate(Bundle savedInstanceState) {
          ...
          ...
     }

     @Override
     public void onRecyclerViewItemClicked(int position) {
          //You will get the position of the Item Clicked over recycler view
          //You can handle as per your requirement
     }
}

执行此操作后,您将收听recyclerview的click事件。然后,您可以相应地处理它。 如果您还有其他疑问,请参考以下文献:
https://stackoverflow.com/a/40584425/8331006
https://stackoverflow.com/a/28304164/8331006

答案 1 :(得分:0)

您可以将点击侦听器设置为不需要将其声明为单独视图的任何视图

yourView.setOnClickListener(this);

,然后在您的onClick(View v)中添加您想要的代码,例如,当您单击所需的视图时:

if(v==imageView){
 //write your code here 
}