当前位置:  开发笔记 > 前端 > 正文

将FirebaseRecyclerViewAdapter耦合到布尔/字符串Map.Entry

如何解决《将FirebaseRecyclerViewAdapter耦合到布尔/字符串Map.Entry》经验,为你挑选了1个好方法。

我在我的应用程序的许多位置使用库中FirebaseRecyclerViewAdaptercom.firebaseui:firebase-ui:0.2.0库.我的问题是如何在查询参数返回多个"索引"条目值(Map.Entry)的情况下应用它.

如Firebase文档(https://www.firebase.com/docs/android/guide/structuring-data.html)所示,我使用索引来保持数据结构不变.这导致我需要将这些索引绑定到ViewHolder的情况.在populate视图方法中,我使用索引的键来检索数据以填充视图.

我在创建适配器时遇到问题,在布尔/字符串Map.Entry的情况下,不确定如何定义'modelClass'参数:

mAdapter = new FirebaseRecyclerViewAdapter, ItemViewHolder>(???.class, R.layout.my_card, ItemViewHolder.class, getItemIndexQuery(mKey) ) {
...
}

Frank van Pu.. 10

你的价值是Boolean,而不是Map.所以你的评论是正确的:你需要为值类型指定Boolean/ Boolean.class.然后,为了能够查找密钥,您需要升级到FirebaseUI-Android 0.2.2.在该版本中,我们添加了一个populateViewHolder(VH, T, int)重载,它将项目的位置作为参数.有了它,您可以查找该项的键.

说这是你的JSON结构:

{
  "items": {
    "pushid1": "Fri Jan 01 2016 16:40:54 GMT-0800 (PST)",
    "pushid2": "Fri Jan 01 2016 16:41:07 GMT-0800 (PST)",
    "pushid3": "Fri Jan 01 2016 16:41:25 GMT-0800 (PST)",
    "pushid4": "Fri Jan 01 2016 16:41:37 GMT-0800 (PST)",
    "pushid5": "Fri Jan 01 2016 16:42:04 GMT-0800 (PST)"
  },
  "index": {
    "pushid1": true,
    "pushid3": true,
    "pushid5": true
  }
}

因此,我们存储表示日期/时间的字符串,并有一个索引来选择这些项的子集.

我们现在可以从索引加载节点,然后加载这些节点引用的项目并在视图中显示它们:

FirebaseRecyclerViewAdapter adapter = 
    new FirebaseRecyclerViewAdapter(
        Boolean.class, android.R.layout.two_line_list_item, ItemViewHolder.class, ref.child("index")){
    protected void populateViewHolder(final ItemViewHolder viewHolder, Boolean model, int position) {
        String key = this.getRef(position).getKey();
        ref.child("items").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
            public void onDataChange(DataSnapshot dataSnapshot) {
                String date = dataSnapshot.getValue(String.class);
                ((TextView)viewHolder.itemView.findViewById(android.R.id.text1)).setText(date);
            }

            public void onCancelled(FirebaseError firebaseError) { }
        });
    }
};

屏幕上的输出:

Android应用显示三个日期

有关完整代码,请Activity34559171在此回购.



1> Frank van Pu..:

你的价值是Boolean,而不是Map.所以你的评论是正确的:你需要为值类型指定Boolean/ Boolean.class.然后,为了能够查找密钥,您需要升级到FirebaseUI-Android 0.2.2.在该版本中,我们添加了一个populateViewHolder(VH, T, int)重载,它将项目的位置作为参数.有了它,您可以查找该项的键.

说这是你的JSON结构:

{
  "items": {
    "pushid1": "Fri Jan 01 2016 16:40:54 GMT-0800 (PST)",
    "pushid2": "Fri Jan 01 2016 16:41:07 GMT-0800 (PST)",
    "pushid3": "Fri Jan 01 2016 16:41:25 GMT-0800 (PST)",
    "pushid4": "Fri Jan 01 2016 16:41:37 GMT-0800 (PST)",
    "pushid5": "Fri Jan 01 2016 16:42:04 GMT-0800 (PST)"
  },
  "index": {
    "pushid1": true,
    "pushid3": true,
    "pushid5": true
  }
}

因此,我们存储表示日期/时间的字符串,并有一个索引来选择这些项的子集.

我们现在可以从索引加载节点,然后加载这些节点引用的项目并在视图中显示它们:

FirebaseRecyclerViewAdapter adapter = 
    new FirebaseRecyclerViewAdapter(
        Boolean.class, android.R.layout.two_line_list_item, ItemViewHolder.class, ref.child("index")){
    protected void populateViewHolder(final ItemViewHolder viewHolder, Boolean model, int position) {
        String key = this.getRef(position).getKey();
        ref.child("items").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
            public void onDataChange(DataSnapshot dataSnapshot) {
                String date = dataSnapshot.getValue(String.class);
                ((TextView)viewHolder.itemView.findViewById(android.R.id.text1)).setText(date);
            }

            public void onCancelled(FirebaseError firebaseError) { }
        });
    }
};

屏幕上的输出:

Android应用显示三个日期

有关完整代码,请Activity34559171在此回购.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有