![](/img/trans.png)
[英]Intent problem: how to use MainActivity from another class “Adapter” to pass data to SecondActivity
[英]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.