Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How pass data from RecyclerView to activity

Tags:

java

android

I need to pass data from recyclerView adapter to main activity on click on image of recyclerview. Can someone help?

public  class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoHolder> {
    private ArrayList<Video> mData;
    private ArrayList<Video> mData2;


    private Activity mACtivity;

    public VideoAdapter(ArrayList<Video> data, ArrayList<Video> data2, Activity activity) {
        this.mData = data;
        this.mData2 = data2;

        this.mACtivity = activity;
    }


    @Override
    public VideoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.anteprima_list_item, parent, false);
        //view.setOnClickListener(mOnClickListener);

        return new VideoHolder(view);
    }

    @Override
    public void onBindViewHolder(VideoHolder holder, int position) {
        Video video = mData.get(position);
        final Video video2 = mData2.get(position);

        holder.setTitolo(video.getTitolo());
        holder.setSottoTitolo(video.getSottotitolo());

        holder.setData(video.getData());

        holder.setData(video.getData());


       /* holder.setAddress(restaurant.getAddress());
        holder.setCost("Average cost for 2: " + restaurant.getCurrency() + restaurant.getCost());
        holder.setRating(restaurant.getRating());*/

        Glide.with(mACtivity)
                .load(video2.getPic())
                .into(holder.restaurantImageView);

        holder.restaurantImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // handle click event here
                System.out.println("PIC"+video2.getPic());
            }
        });

    }

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

    public class VideoHolder extends RecyclerView.ViewHolder {

        ImageView restaurantImageView;
        TextView restaurantNameTextView;
        TextView restaurantAddressTextView;
        TextView restaurantRatingTextView;
        TextView costTextView;
        TextView distanceTextView;
        LinearLayout linearlayout;

        public VideoHolder(View itemView) {
            super(itemView);
             linearlayout=(LinearLayout) itemView.findViewById((R.id.linearlayout));

            restaurantImageView = (ImageView) itemView.findViewById(R.id.imageview_restaurant);
            restaurantNameTextView = (TextView) itemView.findViewById(R.id.textview_restaurant_name);
            restaurantAddressTextView = (TextView) itemView.findViewById(R.id.restaurant_address_textview);
            distanceTextView = (TextView) itemView.findViewById(R.id.restaurant_distance_textview);
           /*  costTextView = (TextView) itemView.findViewById(R.id.cost_for_two_textview);

           restaurantRatingTextView = (TextView) itemView.findViewById(R.id.rating);*/


        }


        public void setTitolo(String titolo) {
            restaurantNameTextView.setText(titolo);
        }

        public void setSottoTitolo(String sottotitolo) {
            restaurantAddressTextView.setText(sottotitolo);
        }

        public void setData(String data) {
            distanceTextView.setText(data);
        }
      /*  public void setPic(String pic) {
            distanceTextView.setText(pic);
        }

         public void setCost(String cost) {
            costTextView.setText(cost);
        }

        public void setDistance(String distance) {
            distanceTextView.setText(distance);
        }*/
    }
}
like image 503
Sisso Avatar asked Nov 08 '17 15:11

Sisso


People also ask

How pass data from RecyclerView to another activity in Android Studio?

Following this, you can just use getIntent() in your second activity and obtain the values and display them. I want to shed some light on the working of intents . Using an intent , you can pass data between activities. See my onBindViewHolder() code.

Can you use a RecyclerView to display data from a database?

With RecyclerView you can display a table of data, display items in a grid or if you want you can also do a Staggered layout as Pinterest does it with every item being a different size. We will show, what you need for a RecyclerView, with a small app that will show a list of cities.


2 Answers

Create a listener Interface and let your MainActivity implement it. That way you can call your callback method in your onClick method.

Interface:

public interface OnImageClickListener {
    void onImageClick(String imageData);
}

MainActivity:

public class MainActivity implements OnImageClickListener {
    @Override
    public void onImageClick(String imageData) {
        // handle image data
    }
//...
}

Your VideoAdapter:

    //...
    private OnImageClickListener onImageClickListener;

    public VideoAdapter(ArrayList<Video> data, ArrayList<Video> data2, Activity activity, OnImageClickListener onImageClickListener) {
        this.mData = data;
        this.mData2 = data2;
        this.mACtivity = activity;
        this.onImageClickListener = onImageClickListener;
    }
    //...
    @Override
    public void onBindViewHolder(VideoHolder holder, int position) {
        //...
        holder.restaurantImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onImageClickListener.onImageClick(video2.getPic());
            }
        });
        //...
    }
    //...
like image 145
Chris Parker Avatar answered Sep 25 '22 07:09

Chris Parker


If you want to pass value from onclick to your Parent activity, use onMethodCallback in your MainActivity:

public class MainActivity extends Activity implements AdapterCallback {

    private MyAdapter mMyAdapter;

    @Override
    public void onMethodCallback(String yourValue) {
       // get your value here
    }

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.mMyAdapter = new MyAdapter(this);
    }
}

In your Adapter:

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

    private AdapterCallback mAdapterCallback;

    public MyAdapter(Context context) {
        try {
            this.mAdapterCallback = ((AdapterCallback) context);
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement AdapterCallback.");
        }
    }

    @Override
    public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) {
        // simple example, call interface here
        // not complete
        viewHolder.itemView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mAdapterCallback.onMethodCallback();
            }
        });
    }

    public static interface AdapterCallback {
        void onMethodCallback(String yourValue);
    }
}
like image 44
Rainmaker Avatar answered Sep 24 '22 07:09

Rainmaker