您能否提供您在 RecyclerView 的适配器中使用的数据模型?我想你可能有这样的事情(这只是一个例子):
{
"id": 123123
"name": "Pizza",
"image": "http://yourimageurl...",
.
.
.
}
所以我要做的是显示一个新的片段或活动,传递用户单击的对象。为了做到这一点,这个类必须是 Parcelable。这样一来,您就可以在下一个屏幕中显示您需要的数据,如果您需要发出另一个请求,比如说使用 Pizza 的 id,您也可以这样做。
举例来说,假设你有一个“Meal”类,所以你只需要将这个类设为 Parcelable:
@Parcelize
data class Meal(
val id: Long,
val name: String,
val imageUrl: String
) : Parcelable
在此之后,在您的项目点击回调中,只需调用您使用的片段/活动来显示选择信息:
fun onItemClickListener(meal: Meal) {
val intent = Intent(this, MealDetailActivity::class.java)
intent.putExtra("selected_meal", meal)
startActivity(intent)
}
在您的“MealDetailActivity”中,只需恢复您的用餐对象并使用它来填充您的视图或获取您需要的数据。
希望这会有所帮助,如果不告诉我,我会尝试更具体。
更新:我添加了 Java 解决方案。
Meal 类应该是这样的:
public class Meal implements Parcelable {
private long id;
private String name;
private String image;
public Meal(long id, String name, String image) {
this.id = id;
this.name = name;
this.image = image;
}
protected Meal(Parcel in) {
id = in.readLong();
name = in.readString();
image = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(id);
dest.writeString(name);
dest.writeString(image);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<Meal> CREATOR = new Creator<Meal>() {
@Override
public Meal createFromParcel(Parcel in) {
return new Meal(in);
}
@Override
public Meal[] newArray(int size) {
return new Meal[size];
}
};
}
如您所见,在 Java 中 Parcelable 更加冗长(我强烈建议您开始使用 Kotlin 进行编码:P)。然而,当你让一个 Java 类实现 Parcelable 接口时,AndroidStudio 会要求你为你添加 Parcelable 实现(在此之前,你必须编写你希望这个类具有的属性)。要澄清这一点,请按照以下步骤操作:
- 创建一个新的 Java 类
- 添加该类需要的属性
- 写信
implements Parcelable
- 在红灯中,单击它并选择“添加 Parcelable 实现”。
然后,在您的项目点击回调中,只需调用您用来显示选择信息的片段/活动:
public void onMealItemClick(Meal meal) {
Intent intent = new Intent(this, MealDetailActivity.class);
intent.putExtra("selected_meal", meal);
startActivity(intent);
}
最后,您可以在 MealDetailActivity 中恢复您的 Meal 对象:
@Override
public void onCreate(@Nullable Bundle onSavedInstanceState) {
Meal selectedMeal = getIntent().getParcelableExtra("selected_meal");
// do the stuff you need to do with your selected item.
}
正如我所说,我建议您检查 Parcelable 的工作原理,因为您将来会经常使用它。
希望这有帮助,如果有请标记为已解决:)