如何在Android中使用带动态参考的FirebaseRecyclerAdapter?

如何在Android中使用带动态参考的FirebaseRecyclerAdapter?,第1张

概述参见英文答案 > Coupling FirebaseRecyclerViewAdapter to a Boolean/String Map.Entry                                    3个 我知道如何在Firebase中的项目列表中使用FirebaseRecyclerAdapter.我也知道如何使用索引从多个位置获取Firebase数据.但我不知道如何将其与F 参见英文答案 > Coupling FirebaseRecyclerViewAdapter to a Boolean/String Map.Entry3个
我知道如何在Firebase中的项目列表中使用FirebaseRecyclerAdapter.我也知道如何使用索引从多个位置获取Firebase数据.但我不知道如何将其与FirebaseRecyclerAdapter结合使用.

我有一个简单的数据结构,用户可以成为朋友:

"users": {  "user1": {    "name": "name","frIEnds": {      "user2": "true"      }    }  "user2": {    "name": "name","frIEnds": {      "user1": "true"      }    }  }

我为用户名使用唯一ID.在这个简单的例子中,用户1和用户2是朋友.我想要做的是使用FirebaseRecyclerAdapter获取所有名称(以及稍后可能更多)的列表.通常,我会通过获取“朋友”下的用户ID然后使用这些ID导航到他们的名字来获得列表.在Java中,它看起来像这样:

Firebase ref = new Firebase("<reference>");ref.child("users/user1/frIEnds").addListenerForSingleValueEvent(new ValueEventListener() {  @OverrIDe  public voID onDataChange(DataSnapshot snapshot) {    String userID = snapshot.getKey();    ref.child("users/" + userID + "/name").addListenerForSingleValueEvent(new ValueEventListener() {      @OverrIDe      public voID onDataChange(DataSnapshot snapshot) {        System.out.println(snapshot.getValue());      }      @OverrIDe      public voID onCancelled(FirebaseError firebaseError) {        // Do something here      }    });  }});

但是在使用FirebaseRecyclerAdapter时,您只能定义一个URL.适配器将根据该单个位置中的项目创建列表.

有没有办法调整适配器,以便从多个位置读取数据,就像上面的例子一样?
或者有没有办法制作一个动态ref变量,它只指向也存储在当前用户“朋友”列表中的用户ID?我在考虑使用equals()方法,但我无法弄清楚究竟是怎么回事.

另一种方法是将用户名也存储在“朋友”列表中.但这不会改善数据结构.我每次都必须在两个地方更改名称(也许是后来的照片),这会引入更多的冗余.

有没有人有解决这个问题的方法?我无法在任何地方找到答案,但它似乎是一种常见的模式.除了让它工作之外,我该如何有效地做到这一点?

解决方法 您需要通过附加addListenerForSingleValueEvent()来连接数据.
FirebaseRecyclerVIEwAdapter<Boolean,ItemVIEwHolder> adapter = new FirebaseRecyclerVIEwAdapter<Boolean,ItemVIEwHolder>(    Boolean.class,androID.R.layout.two_line_List_item,ItemVIEwHolder.class,frIEndsRef){    protected voID populateVIEwHolder(final ItemVIEwHolder vIEwHolder,Boolean model,int position) {        String key = this.getRef(position).getKey();        ref.child("users").child(key).addListenerForSingleValueEvent(new ValueEventListener() {            public voID onDataChange(DataSnapshot dataSnapshot) {                String name = dataSnapshot.child("name").getValue(String.class);                ((TextVIEw)vIEwHolder.itemVIEw.findVIEwByID(androID.R.ID.text1)).setText(name);            }            public voID onCancelled(FirebaseError firebaseError) { }        });    }};

我在sample repo上添加了一个activity Activity36235919 to demonstrate this.

在工作之后我意识到我之前在Coupling FirebaseRecyclerViewAdapter to a Boolean/String Map.Entry已经回答了这个问题,所以我会将你的问题标记为重复.

总结

以上是内存溢出为你收集整理的如何在Android中使用带动态参考的FirebaseRecyclerAdapter?全部内容,希望文章能够帮你解决如何在Android中使用带动态参考的FirebaseRecyclerAdapter?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1136662.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存