我可以知道为什么显示“无法解析符号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) {
}
}
答案 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
}