【发布时间】:2016-08-15 11:48:48
【问题描述】:
我正在尝试在我的项目中实现此代码,但无法正常工作RecyclerView: how to catch the onClick on an ImageView?:
我已经实现了一个接口来处理 recyclerview 中的 onclick imageview 和 onclick 行。问题是,当我尝试单击图像视图或行时,什么也没有发生。如果我在 ViewHolder 类中尝试相同的方法,则可以,因为我可以看到 Toast。问题是我需要从我的片段中进行这项工作。
我认为问题可能出在我将侦听器传递给 ViewHolder 的构造函数时,或者当我从片段中传递侦听器时。
一些帮助将不胜感激:
我的适配器类:
private static List<DatabaseModel> dbList;
private static Context context;
private RecyclerViewClickListener listener;
public class MainTimelineRecyclerAdapter extends RecyclerView.Adapter<MainTimelineRecyclerAdapter.AnViewHolder> {
public MainTimelineRecyclerAdapter(Context context, List<DatabaseModel> dbList, RecyclerViewClickListener listener ){
this.dbList = new ArrayList<DatabaseModel>();
this.context = context;
this.dbList = dbList;
this.listener = listener;
}
public static class AnViewHolder extends RecyclerView.ViewHolder {
public TextView name;
public ImageView contact;
public AnViewHolder(final View itemLayoutView, final RecyclerViewClickListener listener) {
super(itemLayoutView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null)
listener.onRowClicked(getAdapterPosition());
}
});
contact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null)
listener.onViewClicked(v, getAdapterPosition());
}
});
}
}
public interface RecyclerViewClickListener {
void onRowClicked(int position);
void onViewClicked(View v, int position);
}
}
我的片段:
public class MainTimeline extends Fragment implements RecyclerViewClickListener {
private RecyclerViewClickListener listener;
.
.
.
mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, listener);
@Override
public void onViewClicked(View view, int position) {
Toast.makeText(getActivity(), "photo", Toast.LENGTH_SHORT).show();
}
@Override
public void onRowClicked(int position) {
Toast.makeText(getActivity(), "view", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
在将侦听器引用传递给适配器之前,您是否在代码中的某处对其进行了初始化?当您的片段实现回调接口时,您可能希望将其作为侦听器传递: mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this);
-
嗨,Luksprog。谢谢它的工作!如果你愿意,请提供一些代码,我会接受你。
标签: android android-fragments imageview android-recyclerview