![](/img/trans.png)
[英]how to display data using RecyclerView in Android Studio?
[英]How to display different data in other activity in RecyclerView in android using JAVA
例如,我在回收站視圖中創建了一個活動,並給出了包含,即名稱、標題和標題,並且我將 OnClick 偵聽器放入適配器 class 中。 現在我想實現,當我點擊第一個項目時,它應該打開另一個活動,它應該顯示不同的數據,比如當點擊特定人的時候,它應該顯示他/她的 ssn 等詳細信息。我已經創建了所有這些但它顯示第一個活動中的相同數據和第二個活動中的相同數據。
第一項活動:
單擊該 TextView 后,它應顯示為:第二個活動:
您可以使用參數從適配器啟動活動。
如果你需要傳遞 object,你應該將你的數據 class 實現為 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 Class 將數據保存為 state 並將其作為 Intent Object 的額外數據。
這是從 DataVH 啟動的 Second Activity 中的代碼。
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);
}
}
快樂編碼
問候!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.