如何在适配器类中传递意图

时间:2018-10-04 08:22:00

标签: java android android-studio android-intent android-recyclerview

我正在尝试使用意图从一个活动导航到另一个活动,但是当调用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)

3 个答案:

答案 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));
}

此外,您无需将上下文传递给适配器