我对片段有问题。在第一个片段中,我有一个recyclerview,当我单击某个项目时,它将带我到另一个片段。我为此目的定义了一个接口,但是不起作用。这是我适配器中的内容:
private List<KategoriteNested> kategoriteNested;
private Context mContext;
private static OnItemCLickListener mOnItemCLickListener;
public void setOnItemCLickListener(OnItemCLickListener onItemCLickListener) {
mOnItemCLickListener = onItemCLickListener;
}
public AllCategoriesAdapter(List<KategoriteNested> kategoriteNested, Context mContext) {
this.kategoriteNested = kategoriteNested;
this.mContext = mContext;
}
@NonNull
@Override
public AllCategoriesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(mContext)
.inflate(R.layout.all_categories_item, parent, false);
return new AllCategoriesAdapter.AllCategoriesViewHolder(mView);
}
@Override
public void onBindViewHolder(@NonNull AllCategoriesViewHolder holder, int position) {
KategoriteNested mKategoriteNested = kategoriteNested.get(position);
String categoryEmertimi = mKategoriteNested.getKategoria().getName();
holder.categoryEmertimi.setText(categoryEmertimi);
holder.itemView.setOnClickListener(v -> {
int index = holder.getAdapterPosition();
mOnItemCLickListener.OnItemClick(index);
});
}
public interface OnItemCLickListener{
void OnItemClick(int position);
}
@Override
public int getItemCount() {
return kategoriteNested.size();
}
public static class AllCategoriesViewHolder extends RecyclerView.ViewHolder {
TextView categoryEmertimi;
public AllCategoriesViewHolder(@NonNull View itemView) {
super(itemView);
categoryEmertimi = itemView.findViewById(R.id.category_emertimi);
}
}
我使用getAdapterPosition()获得商品位置。在我的片段中,我有这个:
private void goToCategoriesFragment() {
allCategoriesAdapter = new AllCategoriesAdapter(kategoriteNested, getContext());
allCategoriesAdapter.setOnItemCLickListener(position -> {
if (mOnItemCLickListener != null) {
Fragment fragment = new CategoriesDetailsFragment();
assert getFragmentManager() != null;
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
我单击该项目,但没有发生任何动作,我在logcat中也没有收到任何错误消息。我想知道我是否使用接口在片段和适配器之间进行正确的通信,还是缺少其他东西。有人可以给我一个解释,如何使用recyclerview在片段之间导航。任何帮助将不胜感激。
使您的片段实现OnItemCLickListener
接口,还对适配器constructor
进行一些更改,以便您在其中传递列表,上下文和OnItemCLickListener
实例。然后,使您的ViewHolders
实现相同的接口,并将通过适配器构造函数获得的实例传递给viewHolder。