如何从ViewHolder访问工具栏菜单项

时间:2018-03-21 13:26:38

标签: java android android-viewholder

我可以轻松地从适配器访问任何TextViewCardView,但如果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

2 个答案:

答案 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。