簡體   English   中英

將對象從RecyclerView發送到onclick新活動

[英]Send object from RecyclerView to new activity onclick

我希望能夠將對象從RecyclerView上顯示的已解析JSON數據發送到單擊后的新活動。 下面是相關代碼:

我已經嘗試了一些解決方案,但沒有得到任何結果。 我一直收到此錯誤:

java.lang.NullPointerException:嘗試在athena.sentineljs.com.athena.RVNewsAdapter $ NewsViewHolder.onClick(RVNewsAdapter.java)的空對象引用上調用虛擬方法'java.lang.String java.lang.Object.toString()'。 :55)

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;
    }
}

詳細活動:

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

您應該像這樣發送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);
}

另外,為了通過Intent正確傳遞對象,請參見此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM