Android – FirebaseListAdapter的顺序是否相反?

前端之家收集整理的这篇文章主要介绍了Android – FirebaseListAdapter的顺序是否相反?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前有一个FirebaseListAdapter,用最后5个项填充ListView:
  1. @Override
  2. public void onViewCreated(View view,Bundle savedInstanceState){
  3.  
  4. FirebaseListAdapter<HashMap> adapter = new FirebaseListAdapter<HashMap>(getParentFragment().getActivity(),HashMap.class,R.layout.list_item,firebase.limitToLast(5)) {
  5. @Override
  6. protected void populateView(View view,HashMap hashMap,int i) {
  7. String title = hashMap.get("title").toString();
  8. String body = hashMap.get("body").toString();
  9.  
  10. TextView title_txt = (TextView)view.findViewById(R.id.title);
  11. TextView body_txt = (TextView)view.findViewById(R.id.body);
  12.  
  13. title_txt.setText(title);
  14. body_txt.setText(body);
  15. }
  16. };
  17.  
  18. listView.setAdapter(adapter);
  19.  
  20. }

我遇到的问题是,当一个新项目被推送到Firebase时,它会被添加到列表的底部.我想要列表顶部的最新项目.

是否有可能实现这一目标?

非常感谢任何帮助,谢谢!

解决方法

这不是你以相反的顺序从firebase获取数据的问题的确切解决方案,但无论如何,我们还有其他的解决方法.

在为列表使用自定义适配器的注释中提到了第一个解决方法.

要实现您需要将firebase数据放入列表中然后在将其传递给适配器之前自行撤消的行为.简单!

第二种方法很容易就像馅饼一样,我想如果你使用RecyclerView它可以为你做到这一点,我认为这是你做这项工作最简单的方法.

这是我用RecyclerView修改我的一些代码

  1. // Declare the RecyclerView and the LinearLayoutManager first
  2. private RecyclerView listView;
  3. private LinearLayoutManager mLayoutManager;

  1. @Override
  2. public void onViewCreated(View view,Bundle savedInstanceState){
  3.  
  4. // Use FirebaseRecyclerAdapter here
  5.  
  6. // Here you modify your LinearLayoutManager
  7. mLayoutManager = new LinearLayoutManager(MainActivity.this);
  8. mLayoutManager.setReverseLayout(true);
  9. mLayoutManager.setStackFromEnd(true);
  10.  
  11. // Now set the layout manager and the adapter to the RecyclerView
  12. listView.setLayoutManager(mLayoutManager);
  13. listView.setAdapter(adapter);
  14. }

通过设置mLayoutManager.setReverseLayout(true); – 你正在颠倒布局和mLayoutManager.setStackFromEnd(true);将视图定位到列表顶部.

迁移到RecyclerView很简单.你的布局将是这样的

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:paddingBottom="@dimen/activity_vertical_margin"
  8. android:paddingLeft="@dimen/activity_horizontal_margin"
  9. android:paddingRight="@dimen/activity_horizontal_margin"
  10. android:paddingTop="@dimen/activity_vertical_margin">
  11.  
  12. <android.support.v7.widget.RecyclerView
  13. android:id="@+id/my_list"
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent" />
  16. </RelativeLayout>

在你的build.gradle中

  1. dependencies {
  2. compile 'com.android.support:recyclerview-v7:23.4.0'
  3. }

您需要在FirebaseUI库中找到FirebaseRecyclerAdapter.

注意:不要使用RecyclerView.LayoutManager作为setReverseLayout,并且在RecyclerView.LayoutManager中找不到setStackFromEnd函数.如上所述使用LinearLayoutManager.

更新

以下是如何处理列表中项目的点击事件.

您必须声明ViewHolder才能实现RecyclerView吗?只需在ViewHolder类中添加另一个函数,如下例所示,并在setText函数之后调用函数.

  1. public static class MyViewHolder extends RecyclerView.ViewHolder {
  2. View mView;
  3.  
  4. public MyViewHolder(View itemView) {
  5. super(itemView);
  6. mView = itemView;
  7. }
  8.  
  9. public void setClickEvent() {
  10. // Set the onClickListener on mView
  11. // mView.setOnClickListener(new OnClickListener)...
  12. }
  13. }

猜你在找的Android相关文章