簡體   English   中英

如何在適配器類中傳遞意圖

[英]How to pass intent in adapter class

我試圖使用意圖從一個活動導航到另一個活動,但是當調用onclick方法給出空指針異常時,我的應用程序崩潰了,這是我的適配器類的代碼。

@Override
public void onBindViewHolder(absadapter.exViewHolder holder, final int position){
    holder.exname.setText(exList.get(position).name);
    holder.exlogo.setImageResource(exList.get(position).logoId);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (position == 0) {
                Intent intent=new Intent(context,crunches.class);
                context.startActivity(intent);
            }
        }
    });


}

這是logcat錯誤:

FATAL EXCEPTION: main
              Process: com.example.ruchit.totalfitness, PID: 1481
              java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
                  at android.content.ComponentName.<init>(ComponentName.java:130)
                  at android.content.Intent.<init>(Intent.java:5787)
                  at com.example.ruchit.totalfitness.absadapter$1.onClick(absadapter.java:60)
                  at android.view.View.performClick(View.java:6312)
                  at android.view.View$PerformClick.run(View.java:24811)
                  at android.os.Handler.handleCallback(Handler.java:790)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:171)
                  at android.app.ActivityThread.main(ActivityThread.java:6649)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

改變這個

 Intent intent=new Intent(context,crunches.class);
            context.startActivity(intent);

v.getContext().startActivity(new Intent(v.getContext(), crunches.class));

希望能幫助到你。!

我看到您已修復它,但嘗試更改

 Intent intent=new Intent(context,crunches.class);

 Intent intent=new Intent(this,crunches.class);

很好奇是否行得通

發起活動不是持有者或適配器的責任! SOLID原則S說“單一對象責任”! 擁有者角色僅顯示值和處理點擊,但不執行點擊行為! 您應該在使用界面或更簡單的Butterknife界面初始化回收商和adpater的活動中執行此操作

holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (position == 0) {
                EventBus.getDefault().post(new OnClickEvent())
            }
        }
    });

在活動中

@Subscribe(threadMode = Thread.MAIN)
public void onClickItem(OnClickEvent event) {
      startActivity(new Intent(this,crunches.class));
}

此外,您不需要將上下文傳遞給適配器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM