我正在尝试使用意图从一个活动导航到另一个活动,但是当调用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)
答案 0 :(得分:1)
更改此
Intent intent=new Intent(context,crunches.class);
context.startActivity(intent);
收件人
v.getContext().startActivity(new Intent(v.getContext(), crunches.class));
希望有帮助。
答案 1 :(得分:0)
我看到您已修复它,但是尝试更改
Intent intent=new Intent(context,crunches.class);
到
Intent intent=new Intent(this,crunches.class);
我很好奇是否会起作用
答案 2 :(得分:0)
开始活动不是持有者或适配器的责任! 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));
}
此外,您无需将上下文传递给适配器