简体   繁体   English

将对象从RecyclerView发送到onclick新活动

[英]Send object from RecyclerView to new activity onclick

I'd like to be able to send an object from parsed JSON data displayed on a RecyclerView to a new activity on click. 我希望能够将对象从RecyclerView上显示的已解析JSON数据发送到单击后的新活动。 Below is the relevant code: 下面是相关代码:

I've tried a few solutions but I don't get any results. 我已经尝试了一些解决方案,但没有得到任何结果。 I've been getting this error: 我一直收到此错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at athena.sentineljs.com.athena.RVNewsAdapter$NewsViewHolder.onClick(RVNewsAdapter.java:55) java.lang.NullPointerException:尝试在athena.sentineljs.com.athena.RVNewsAdapter $ NewsViewHolder.onClick(RVNewsAdapter.java)的空对象引用上调用虚拟方法'java.lang.String java.lang.Object.toString()'。 :55)

RVNewsAdapter: RVNewsAdapter:

public class RVNewsAdapter extends RecyclerView.Adapter<RVNewsAdapter.NewsViewHolder> {

    public static final String KEY_LINK = "link";

    public static class NewsViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener {
        private static final String TAG = "Hello";
        CardView cv;
        TextView date;
        TextView link;
        TextView title;
        TextView today;
        List<News> news;


        public NewsViewHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cv);
            date = (TextView) itemView.findViewById(R.id.date);
            link = (TextView) itemView.findViewById(R.id.link);
            title = (TextView) itemView.findViewById(R.id.heading);
            today = (TextView) itemView.findViewById(R.id.today);


            itemView.setOnClickListener(this);
        }


        @Override
        public void onClick(View view) {
            Context context = view.getContext();

            Intent intent;

            intent = new Intent(context, Details.class);
            intent.putExtra("LINK", news.toString());
            context.startActivity(intent);


        }


    }

    List<News> news;

    RVNewsAdapter(List<News> news) {
        this.news = news;
    }


    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    @Override
    public RVNewsAdapter.NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false);
        NewsViewHolder nvh = new NewsViewHolder(v);
        return nvh;
    }

    @Override
    public void onBindViewHolder(NewsViewHolder newsViewHolder, int i) {
        newsViewHolder.date.setText(news.get(i).date);
        newsViewHolder.link.setText(news.get(i).link);
        newsViewHolder.title.setText(news.get(i).title);
        newsViewHolder.today.setText(news.get(i).today);
    }

    @Override
    public int getItemCount() {
        if (news != null) {
            return news.size();
        }
        return 0;
    }
}

Details activity: 详细活动:

public class Details extends AppCompatActivity {

    private static final String TAG_LINK = "link";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Intent in = getIntent();

        // Get JSON values from previous intent
        String link = in.getStringExtra("link");

        // Displaying all values on the screen
        TextView lblLink = (TextView) findViewById(R.id.link);

        lblLink.setText(link);
        Log.d("Details", "Data not shown");

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

You should send the news object like this 您应该像这样发送news object

@Override
public void onClick(View view) {
    Context context = view.getContext();

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

    int clickPosition = getAdapterPosition();  // get position of clicked item

    News newObject = news.get(clickPosition);   // get clicked new object from news(news is an ArrayList) 
    intent.putExtra("LINK", newObject);

    context.startActivity(intent);
}

Also for pass the object via Intent correctly please see this answer 另外,为了通过Intent正确传递对象,请参见此答案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从包含卡片的Recyclerview中打开新活动 - Open new activity from Recyclerview containing cards 如何将数据从Recyclerview传递到新活动 - How to pass data from recyclerview to new activity 从 recyclerview 适配器开始新活动 - Starting new activity from recyclerview adapter 将活动转换为片段会阻止RecyclerView onclick侦听器正常工作 - Converting activity into fragment is stops the RecyclerView onclick listener from working 如何在 recyclerview 中提供 onclick 以从 mysql 获取另一个活动的值 - how to give onclick in recyclerview to get values to another activity from mysql 基于URL ID从一个活动传递到另一个活动的onclick事件值在recyclerview中出现问题 - Issues in recyclerview with onclick event values passed from one activity to another activity based on url id 需要将 RecyclerView 中选中的复选框从一个活动发送到另一个活动 - Need to send the checked checkbox in RecyclerView from one activity to another 如何在另一个 Activity 中将 TextView 的值发送到 RecyclerView - How to send a value from TextView to RecyclerView in another Activity 如何将字符串数据从 Activity 发送到启动服务 onclick 方法? - How to send string data from Activity to started Service onclick method? 共享元素从viewpager内的fragment recyclerview过渡到新活动? - Shared element transition from fragment recyclerview inside viewpager to new activity?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM