如何使用orderByKey()以降序而不是升序#Askfirebase [英] How to use orderByKey() in descending order instead of ascending #Askfirebase

查看:161
本文介绍了如何使用orderByKey()以降序而不是升序#Askfirebase的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨大卫和Firebase团队,
我试图通过最近的侦察来订购FragmentStatePagerAdapter中的选项卡。将项目插入到FragmentStatePagerAdapter并使其正常刷新似乎非常困难。因此,如果Firebase只是按降序而不是按升序(最近的第一个)递给我的密钥,那么不是这样做,这会让我的生活更轻松。如果这是不可能的,请考虑这个功能请求 orderByKeyDescending() :)任何帮助将不胜感激!谢谢!



这是我期望的侦听器BTW:

  scoutRef。 orderByKeyDescending()。addChildEventListener(new ChildEventListener(){
@Override
public void onChildAdded(DataSnapshot dataSnapshot,String s){
mSectionsPagerAdapter.mKeyPosition.add(dataSnapshot.getKey());
mSectionsPagerAdapter.notifyDataSetChanged();
}
$ b $ @覆盖
public void onChildChanged(DataSnapshot dataSnapshot,String s){

}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot){


$ b @Override
public void onChildMoved(DataSnapshot dataSnapshot,字符串s){

}

@覆盖
public void onCancelled(DatabaseError databaseError){
FirebaseCrash.repo室温(databaseError.toException());
}
});


解决方案

非常感谢 $ b $ p $ t $; $您无法使用Firebase以降序获取数据,期。你必须在客户端执行。



客户端的解决方案是 return POSITION_NONE(-2) getItemPosition 中。如果你想更高性能,你可以阅读更多关于标签在这里: ViewPager PagerAdapter不更新

以下是完整的适配器:

  public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

List< String> mKeyPosition = new ArrayList<>();

public SectionsPagerAdapter(FragmentManager fm){
super(fm);
}

@Override
public int getItemPosition(Object object){
return POSITION_NONE;
}

@Override
public Fragment getItem(int position){
// getItem被调用来实例化给定页面的片段。
//返回一个PlaceholderFragment(定义为下面的静态内部类)。
返回PlaceholderFragment.newInstance(mKeyPosition.get(position));


@Override
public int getCount(){
return mKeyPosition.size();

$ b @Override
public CharSequence getPageTitle(int position){
returnSCOUT+(getCount() - position);


public void add(String key){
mKeyPosition.add(0,key);
notifyDataSetChanged();
}
}

以及Firebase侦听器:



pre $ public $ updateScouts(finalScrollActivity.SectionsPagerAdapter mSectionsPagerAdapter){
scoutReference.addChildEventListener(new ChildEventListener(){
@Override
public void onChildAdded(DataSnapshot dataSnapshot,String s){
mSectionsPagerAdapter.add(dataSnapshot.getKey());
}
$ b $ @覆盖
public void onChildChanged (DataSnapshot dataSnapshot,String s){
// ...
}
$ b $ @覆盖
public void onChildRemoved(DataSnapshot dataSnapshot){
// ...
}

@Override
public void onChildMoved(DataSnapshot dataSnapshot,String s){
// ...
}

@Override
public void onCancelled(DatabaseError databaseError){
Fire baseCrash.report(databaseError.toException());
}
});
}


Hi David and the Firebase team, I am trying to order the tabs in a FragmentStatePagerAdapter by most recent "scout." It seems really hard to insert an item into a FragmentStatePagerAdapter and get it to refresh properly. So instead of doing that, it would make my life way easier if Firebase just gave me the keys in descending order instead of ascending (most recent first). If this is not possible, consider this a feature request for orderByKeyDescending() :) Any help would be appreciated! Thanks!

Here is my desired listener BTW:

scoutRef.orderByKeyDescending().addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                mSectionsPagerAdapter.mKeyPosition.add(dataSnapshot.getKey());
                mSectionsPagerAdapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                FirebaseCrash.report(databaseError.toException());
            }
        });

解决方案

Huge thanks to wisemann!!!

TL;DR You can't get data in descending order with Firebase, period. You have to do it on the client side.

The solution on the client side for me was to to return POSITION_NONE (-2) in getItemPosition. If you want to be more performant, you can read more about tags here: ViewPager PagerAdapter not updating the View.

Here is the full adapter:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    List<String> mKeyPosition = new ArrayList<>();

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return PlaceholderFragment.newInstance(mKeyPosition.get(position));
    }

    @Override
    public int getCount() {
        return mKeyPosition.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "SCOUT " + (getCount() - position);
    }

    public void add(String key) {
        mKeyPosition.add(0, key);
        notifyDataSetChanged();
    }
}

And the Firebase listener:

public void updateScouts(final CurrentScoutActivity.SectionsPagerAdapter mSectionsPagerAdapter) {
    scoutReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            mSectionsPagerAdapter.add(dataSnapshot.getKey());
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
           //...
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
           //...
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
           //...
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            FirebaseCrash.report(databaseError.toException());
        }
    });
}

这篇关于如何使用orderByKey()以降序而不是升序#Askfirebase的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆