1

I'm trying to pass the data between this RecyclerAdapter to DetailsActivity which is when the user clicked on each item, get the item position and then for example get the title from recyclerView and show it into MainRecyclerDetails TextView, and here is my try:

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.FeedListRowHolder> {

    private List<FeedItem> feedItemList;
    private Context mContext;

    public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) {
        this.feedItemList = feedItemList;
        this.mContext = context;
    }

    @Override
    public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null);
        return new FeedListRowHolder(v);
    }

    @Override
    public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {

        FeedItem feedItem = feedItemList.get(i);
        Picasso.with(mContext).load(feedItem.getThumbnail())
                .error(R.drawable.placeholder)
                .placeholder(R.drawable.placeholder)
                .into(feedListRowHolder.thumbnail);
        feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
        feedListRowHolder.date.setText(Html.fromHtml(feedItem.getDate()));
        feedListRowHolder.tags.setText(Html.fromHtml(feedItem.getTags()));
        feedListRowHolder.thumbnail.setOnClickListener(clickListener);
        feedListRowHolder.title.setOnClickListener(clickListener);
        feedListRowHolder.date.setOnClickListener(clickListener);
        feedListRowHolder.tags.setOnClickListener(clickListener);
        feedListRowHolder.thumbnail.setTag(feedListRowHolder);
        feedListRowHolder.title.setTag(feedListRowHolder);
        feedListRowHolder.date.setTag(feedListRowHolder);
        feedListRowHolder.tags.setTag(feedListRowHolder);
    }

    @Override
    public int getItemCount() {
        return (null != feedItemList ? feedItemList.size() : 0);
    }

    View.OnClickListener clickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FeedListRowHolder holder = (FeedListRowHolder) view.getTag();
            int position = holder.getAdapterPosition();
            FeedItem feedItem = feedItemList.get(position);
            Toast.makeText(mContext, feedItem.getTitle(), Toast.LENGTH_SHORT).show();

            Intent i = new Intent(mContext, MainRecyclerDetails.class);

            String getrec = feedItem.getTitle();
            Bundle bundle = new Bundle();
            bundle.putString("title", getrec);
            i.putExtras(bundle);
            startActivity(i);


        }
    };


    class FeedListRowHolder extends RecyclerView.ViewHolder {

        protected ImageView thumbnail;
        protected TextView title;
        protected TextView date;
        protected TextView tags;

        public FeedListRowHolder(View view) {
            super(view);
            this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
            this.title = (TextView) view.findViewById(R.id.title);
            this.date = (TextView) view.findViewById(R.id.date);
            this.tags = (TextView) view.findViewById(R.id.tagsItems);
        }
    }

}

for getting it in DetailsActivity:

Bundle bundle = getIntent().getExtras();
        String title = bundle.getString("title");

But, it's not working.

What am i doing wrong with this?

Cheers!

mandev
  • 257
  • 1
  • 5
  • 20
  • where is your `OnClickListener` ? Check if [this](http://stackoverflow.com/questions/29107110/listview-getitematpositioni-equivalent-in-recyclerview/29107243#29107243) helps – Blackbelt Oct 04 '15 at 10:29
  • @Blackbelt - this one?:`View.OnClickListener clickListener = new View.OnClickListener()` – mandev Oct 04 '15 at 11:57
  • I completely missed that. What happens ? are fDetailsActivity and MainRecyclerDetails the same activity ? – Blackbelt Oct 04 '15 at 12:30
  • @Blackbelt - no, i just edit the question and fix this mistake. – mandev Oct 04 '15 at 12:39

1 Answers1

2

You can implement this way

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.FeedListRowHolder> {

    private List<FeedItem> feedItemList;
    private Context mContext;

    public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) {
        this.feedItemList = feedItemList;
        this.mContext = context;
    }

    @Override
    public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null);
        return new FeedListRowHolder(v);
    }

    @Override
    public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
        FeedItem feedItem = feedItemList.get(i);
        Picasso.with(mContext).load(feedItem.getThumbnail())
                .error(R.drawable.placeholder)
                .placeholder(R.drawable.placeholder)
                .into(feedListRowHolder.thumbnail);
        feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
        feedListRowHolder.date.setText(Html.fromHtml(feedItem.getDate()));
        feedListRowHolder.tags.setText(Html.fromHtml(feedItem.getTags()));
    }

    @Override
    public int getItemCount() {
        return (null != feedItemList ? feedItemList.size() : 0);
    }

    class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        protected ImageView thumbnail;
        protected TextView title;
        protected TextView date;
        protected TextView tags;

        public FeedListRowHolder(View view) {
            super(view);
            this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
            this.title = (TextView) view.findViewById(R.id.title);
            this.date = (TextView) view.findViewById(R.id.date);
            this.tags = (TextView) view.findViewById(R.id.tagsItems);

            thumbnail.setOnClickListener(this);
            title.setOnClickListener(this);
            date.setOnClickListener(this);
            tags.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            FeedItem feedItem = feedItemList.get(position);
            Toast.makeText(mContext, feedItem.getTitle(), Toast.LENGTH_SHORT).show();

            Intent i = new Intent(mContext, MainRecyclerDetails.class);
            String getrec = feedItem.getTitle();
            i.putExtra("title", getrec);
            mContext.startActivity(i);
        }
    }

}

in your MainRecyclerDetails activity

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle extra = getIntent().getExtras();
    String title = extra.getString("title");
}
steven274
  • 3,321
  • 2
  • 10
  • 11
  • nx steven, but still this line startActivity(i); doesn't work, should i use another way for pass the data? i just need to show each item details on that activity... – mandev Oct 04 '15 at 14:15
  • you can try putExtra method in Intent object, see my edited code – steven274 Oct 04 '15 at 14:30