Вы можете запустить активность с вашего адаптера с параметром.
Если вам нужно передать объект, вы должны реализовать свой класс данных как 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