如何根据recyclerview android java中的数据加载数据

Posted

技术标签:

【中文标题】如何根据recyclerview android java中的数据加载数据【英文标题】:How to load data according to data in recyclerview android java 【发布时间】:2021-10-28 10:17:12 【问题描述】:

我对 android 和 Firebase 很陌生

所以我的问题是:我有一个这样的 RecylerView:

注意:我正在从 Firebase Firestore 加载数据,因此请根据此给出答案

我希望 如果有人点击 Pizza,那么应该像这样加载披萨的数据:

如果您对我的问题有任何疑问或疑问,请随时在评论中提问。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您能否提供您在 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 的工作原理,因为您将来会经常使用它。

希望这有帮助,如果有请标记为已解决:)

【讨论】:

你能给我看看这段java代码吗?? 在 Java 中非常相似,最大的区别在于 Parcelable 的实现,因为您将无法使用 @Parcelize 注释。对于这部分,我建议你查看官方文档。我将使用 java 实现更新我的答案。 Kotlin 易学且比 java 好?一点帮助 如果我懂 java,那么 kotlin 会容易、普通或困难 我有一个疑问,假设我想要这顿饭的名称,即披萨。我怎么知道那顿饭的名字。 ???

以上是关于如何根据recyclerview android java中的数据加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android RecyclerView 上对字符串进行排序?

如何在 Android Studio 的 datasnapshot/recyclerview 中创建条件?

如何使 RecyclerView 与 Composable ViewHolder 渲染更快?

android 实用的小技巧(RecyclerView 数据排序 -- SortedList)

Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题

Android 如何获取Android RecyclerView滑动的距离