如何使用JAVA在android的RecyclerView中显示其他活动中的不同数据



例如,我在recyclerator视图中创建了一个活动,并给出了包含的内容,即名称、标题和标题,还将OnClick Listener放在了适配器类中。现在我想实现的是,当我点击第一个项目时,它应该打开另一个活动,它应该显示不同的数据,比如当点击特定的人时,它可以显示他/她的ssn等详细信息。

第一项活动:

  • 名称:xyz
  • 头衔:创始人
  • 标题:真棒

点击该TextView后,它应该显示为:第二项活动:

  • 名称:xyz
  • 头衔:创始人
  • 标题:真棒
  • 描述:Lorem ipsum悲哀坐amet,consectetur adipiscing elit。Duis aliquet,lectus sed laoreet lobortis,erat arcu sodales purus,ut pharetra quam erat ac quam。这是一个好兆头,是一个成功的机会。Mauris sollicitudin mattis nibh sed feugiat

您可以使用参数从适配器启动活动。

若需要传递对象,则应将数据类实现为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对象的额外数据。

第二项活动

这是从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);
}
}

快乐编码

问候!

最新更新