Как отображать разные данные в другом действии в RecyclerView в Android с помощью JAVA

Например, я создал одно действие в представлении переработчика и дал ему содержимое, то есть имя, заголовок и заголовок, а также поместил прослушиватель OnClick в класс адаптера. Теперь я хочу реализовать это, когда я нажимаю на первый элемент, тогда он должен открывать другое действие, и он должен отображать разные данные, например, при нажатии на конкретного человека, тогда он должен отображать детали его/ее ssn и т. д. Я создал все это, но он показывает те же данные в 1-м действии и те же данные во 2-м действии.

1-е занятие:

  • имя: xyz
  • титул: основатель
  • заголовок: круто

после нажатия на этот TextView он должен отображаться как: 2-е действие:

  • имя: xyz
  • титул: основатель
  • заголовок: круто
  • описание: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis aliquet, lectus sed laoreet lobortis, erat arcu sodales purus, ut pharetra quamerat ac quam. Ut dui augue, sucipit vel dui eget, ultricies efficitur ante. Mauris sollicitudin mattis nibh sed feugiat.

person Mediad    schedule 04.05.2021    source источник
comment
Не могли бы вы выложить хотя бы свой адаптер? Или какой-то код?   -  person Skizo-ozᴉʞS    schedule 04.05.2021
comment
Вы хотите передать тот же объект из RecyclerAdapter в другое действие?   -  person Min Lwin    schedule 04.05.2021
comment
При вызове подробной активности из вашего элемента представления ресайклера передайте данные в намерении и сделайте класс вашей модели разделяемым или сериализуемым.   -  person Nitin Prakash    schedule 04.05.2021


Ответы (1)


Вы можете запустить активность с вашего адаптера с параметром.

Если вам нужно передать объект, вы должны реализовать свой класс данных как Serializable или Parcelable.

Класс данных

Вы можете получить данные, которые вы передали из первого действия.

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
}

Класс адаптера

Реализация адаптера следующая. В этом примере кода я реализую ListAdater, а не 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 хранит данные как состояние и помещает их как дополнительные данные с помощью Intent Object.

Второе действие

Это коды второго действия, которое было запущено из 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);
    }
}

Счастливого кодирования

С Уважением!

person Min Lwin    schedule 04.05.2021