【问题标题】:how to include different intent in recyclerview如何在recyclerview中包含不同的意图
【发布时间】:2017-05-30 21:12:31
【问题描述】:

我计划在我的项目中包含CardView。我已经在我的项目中包含了RecyclerView 和卡片视图。问题是,我想为每张卡调用不同的活动。我为每张卡实现了不同的意图。但它需要我初始化数据。这是我的原始代码:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

private Context context;

private String[] titles = {"Add new Research",
        "View Your Research"};

private String[] details = {"Add your research files here",
        "View all of your posted research"};

private int[] images = { R.drawable.add,
        R.drawable.view};

class ViewHolder extends RecyclerView.ViewHolder{

    public int currentItem;
    public ImageView itemImage;
    public TextView itemTitle;
    public TextView itemDetail;

    public ViewHolder(View itemView) {
        super(itemView);
        itemImage = (ImageView)itemView.findViewById(R.id.item_image);
        itemTitle = (TextView)itemView.findViewById(R.id.item_title);
        itemDetail =
                (TextView)itemView.findViewById(R.id.item_detail);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                int position = getAdapterPosition();
                Intent intent = new Intent(context, Choose.class);

                if(position==0){
                   intent =  new Intent(context, AddFiles.class);

                }else if(position==1){
                    intent =  new Intent(context, ViewFiles.class);

                }
                context.startActivity(intent);
            }
        });
    }
}

当我点击卡片视图时,它表明我的程序没有响应。

即使我将意图初始化为

Intent intent = null;
 if(position==0){
  intent =  new Intent(context, AddFiles.class);

   }else if(position==1){
    intent =  new Intent(context, ViewFiles.class);

     }
     context.startActivity(intent);

还是有错误,我该怎么办?还是有更好的方法来做到这一点。 这是我的 logcat 错误。

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.user.mcormpelo, PID: 3645
              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:128)
                  at android.content.Intent.<init>(Intent.java:4449)
                  at com.example.user.mcormpelo.RecyclerAdapter$ViewHolder$1.onClick(RecyclerAdapter.java:46)
                  at android.view.View.performClick(View.java:5198)
                  at android.view.View$PerformClick.run(View.java:21147)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • 您的上下文为空。初始化它。
  • 将应用程序上下文或类引用传递给上下文以使用适配器启动活动。
  • 谢谢 :) 问题解决了

标签: android android-intent android-recyclerview onclicklistener cardview


【解决方案1】:

你没有初始化context

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

        private Context context;

        public RecyclerAdapter(Context context) {
            this.context = context;
        }

从调用者活动传递Activity 引用。 示例用法

  RecyclerAdapter rcAdapter = new RecyclerAdapter(MainActivity.this);

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多