我正在尝试在我的项目中实现此代码,但不起作用 RecyclerView: how to catch the onClick on an ImageView? :
我已经实现了一个接口(interface)来处理 recyclerview 中的 onclick imageview 和 onclick row。问题是,当我尝试单击 ImageView 或行中时,什么也没有发生。如果我在 ViewHolder 类中尝试相同的操作,则有效,因为我可以看到 Toast。问题是我需要从我的 fragment 中完成这项工作。
我认为问题可能出在我将监听器传递给 ViewHolder 的构造函数或从 fragment 传递监听器时。
一些帮助将不胜感激:
我的适配器类:
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);
}
}
我的 fragment :
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();
}
}
最佳答案
如果您希望 fragment 监听适配器中发生的操作,那么您需要将其注册为适配器中发生的事件的监听器(通过实现接口(interface)并将 fragment 作为监听器传递):
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
}
关于android - 当我从 fragment 调用它时,我的接口(interface)类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38954507/