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

我对 android 和 Firebase 很陌生

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

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

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: java android google-cloud-firestore android-recyclerview


    【解决方案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 实现(在此之前,你必须编写你希望这个类具有的属性)。要澄清这一点,请按照以下步骤操作:

    1. 创建一个新的 Java 类
    2. 添加该类需要的属性
    3. 写信implements Parcelable
    4. 在红灯中,单击它并选择“添加 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 会容易、普通或困难
    • 我有一个疑问,假设我想要这顿饭的名称,即披萨。我怎么知道那顿饭的名字。 ???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多