How to display different data in other activity in RecyclerView in android using JAVA

873 Views Asked by At

For example, I have created one activity in recycler view and gave the contains i.e., name, title and heading and also I have put OnClick Listener in the adapter class. Now I want to implement that when I click on first item then it should open another activity and it should display different data like when Clicked in particular person's then it should display the details his/her ssn etc. I have created all these but it shows same data in 1st activity and same data in 2nd activity.

1st activity:

  • name: xyz
  • title: founder
  • heading: awesome

after click on that TextView then it should display as: 2nd activity:

  • name: xyz
  • title: founder
  • heading: awesome
  • description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis aliquet, lectus sed laoreet lobortis, erat arcu sodales purus, ut pharetra quam erat ac quam. Ut dui augue, suscipit vel dui eget, ultricies efficitur ante. Mauris sollicitudin mattis nibh sed feugiat.
1

There are 1 best solutions below

0
Min Lwin On

You can start activity from your adapter with parameter.

If you need to pass object, you should implement your data class to Serializable or Parcelable.

Data Class

You can retrieve data that you passed from first activity.

public class Data  implements Parcelable {

    public static String PARAM = "selected.data";

    private String name;
    private String title;
    private String heading;

    // Parcelable Implementations
    @Override
    public int describeContents() {
        return hashCode();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(title);
        dest.writeString(heading);
    }

    public static final Parcelable.Creator<Data> CREATOR
            = new Parcelable.Creator<Data>() {
        public Data createFromParcel(Parcel in) {
            return new Data(in);
        }

        public Data[] newArray(int size) {
            return new Data[size];
        }
    };

    // Constructors
    // Getter & Setters
    // Override Equals and HashCode Methods
}

Adapter Class

Adapter Implementation is as follow. In this sample codes, I implement ListAdater rather than RecyclerAdapter.

public class DataAdapter extends ListAdapter<Data, DataAdapter.DataVH> {

    public DataAdapter() {
        super(new DiffUtil.ItemCallback<Data>() {
            @Override
            public boolean areItemsTheSame(@NonNull Data oldItem, @NonNull Data newItem) {
                return oldItem.getName().equals(newItem.getName());
            }

            @Override
            public boolean areContentsTheSame(@NonNull Data oldItem, @NonNull Data newItem) {
                return oldItem.equals(newItem);
            }
        });
    }

    @NonNull
    @Override
    public DataVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.data_item, parent, false);
        return new DataVH(view);
    }

    @Override
    public void onBindViewHolder(@NonNull DataVH holder, int position) {
        holder.setData(getItem(position));
    }

    public static class DataVH extends RecyclerView.ViewHolder {

        private Data data;

        public DataVH(@NonNull View itemView) {
            super(itemView);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(null != data) {

                        Context context = itemView.getContext();
                        // Start Second Activity With Data
                        Intent intent = new Intent(context, SecondActivity.class);

                        // Put Extra Data
                        intent.putExtra(Data.PARAM, data);

                        // Launch Activity
                        context.startActivity(intent);
                    }
                }
            });
        }

        public void setData(Data data) {
            this.data = data;
            setText(itemView.findViewById(R.id.name_label), data.getName());
            setText(itemView.findViewById(R.id.title_label), data.getTitle());
            setText(itemView.findViewById(R.id.heading_label), data.getHeading());
        }

        private void setText(TextView view, String text) {
            view.setText(text);
        }
    }
}

DataVH Class hold Data as a state and put it as extra data with Intent Object.

Second Activity

This is the codes within Second Activity, that has been launched from DataVH.

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // Retrieve Data from Intent Object
        Data data = getIntent().getParcelableExtra(Data.PARAM);

        if(null != data) {
            setText(findViewById(R.id.text_name), data.getName());
            setText(findViewById(R.id.text_title), data.getTitle());
            setText(findViewById(R.id.text_heading), data.getHeading());
        }

    }

    private void setText(TextView view, String text) {
        view.setText(text);
    }
}

Happy Coding

Regards!