我正在尝试在我的项目中实现此代码,但无法正常使用RecyclerView:如何在ImageView上捕获onClick?:
我已经实现了一个接口来处理recyclerview中的onclick imageview和onclick行。问题是,当我尝试单击imageview或在该行中时,什么也没有发生。如果我在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();
}
}
如果要让片段监听适配器中发生的操作,则需要将其注册为适配器中发生的事件的侦听器(通过实现接口并将片段作为侦听器传递):
public class MainTimeline extends Fragment implements RecyclerViewClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// you don't need a private RecyclerViewClickListener listener; reference as you have the fragment itself
mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this);
}
// implement the methods from the interface
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句