我可以轻松地从适配器访问任何TextView
或CardView
,但如果I want to access toolbar menu item
,则会出错,如何从onBindviewHolder中的外部适配器访问toolbar menu item
,如这docs。
public class SoruDoldurucu extends RecyclerView.ViewHolder {
public CardView cevapA,cevapB,cevapC,cevapD,cevapE;
public TextView a,b,c,d,e,Soru;
public MenuItem fav;
ViewStub stub;
public SoruDoldurucu(View itemView) {
super(itemView);
Soru = itemView.findViewById(R.id.Soru_text);
stub = itemView.findViewById(R.id.layout_stub);
stub.setLayoutResource(R.layout.siklargrid);
stub.inflate();
cevapA = itemView.findViewById(R.id.cardView_A);
cevapB = itemView.findViewById(R.id.cardView_B);
cevapC = itemView.findViewById(R.id.cardView_C);
cevapD = itemView.findViewById(R.id.cardView_D);
cevapE = itemView.findViewById(R.id.cardView_E);
fav = itemView.findViewById(R.id.favorite); // if I write this line it gives error null pointer
答案 0 :(得分:0)
您应该只从Fragment或Acrivity访问工具栏。为此,请创建侦听器实现方法,以涵盖所请求的功能,如下所示:
interface ToolbarListener {
void accesToolbarAndDoSomething();
}
让你的片段或活动实现它并传递"这个"作为RecyclerView.Adapter的参数:
public class SoruDoldurucuAdapter extends RecyclerView.Adapter (...) {
ToolbarListener listener;
public SoruDoldurucu (... , ToolbarListener listener) {
this.listener = listener;
}
public class SoruDoldurucu extends RecyclerView.ViewHolder {
public SoruDoldurucu(View itemView) {
super(itemView);
Soru = itemView.findViewById(R.id.Soru_text);
stub = itemView.findViewById(R.id.layout_stub);
button.setOnClickListener(() -> listener.accesMenuAndDoSomething());
}
}
答案 1 :(得分:0)
您正在获取NPE,因为您传递给ViewHolder类的视图没有工具栏(或者名为“favorite”的ID)。
您的工具栏可能位于片段或活动中,要更新它,创建一个监听器并将onBindViewHolder中的一些数据发送给父级并在那里更新UI。