更新Firebase RecyclerviewAdapter不会删除以前的列表

时间:2017-08-25 15:14:48

标签: android firebase firebase-realtime-database android-recyclerview recycler-adapter

我正在建立监控加密货币的应用程序,我正在使用firebase UI,一切正常,直到我尝试更新适配器(Firebase不支持客户端过滤)并且我正在添加"搜索"特征。我得到了更新的值,但我的数据移动到以前的recyclerview列表(哪些变得不可见,但占用空间)。我想我错过了某种" Clear recyclerview"功能。 BTW。我在Fragment中使用它。请帮忙。

提前致谢。

    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity()));


    @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    inflater.inflate(R.menu.menu,menu);
    MenuItem item = menu.findItem(R.id.action_search);

    SearchView searchView = (SearchView)item.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.i(TAG,newText);

            Query ref1 = FirebaseRef.getDatabase().child("Coins");

            mAdapter = new FirebaseRecyclerAdapter<Coins, CoinsViewHolder>(Coins.class, R.layout.coins_card, CoinsViewHolder.class,
                    ref1.orderByChild("short").startAt(newText).endAt("~").limitToFirst(3)) {
                @Override
                public void populateViewHolder(CoinsViewHolder coinsViewHolder, Coins coinsData, int position) {

                    if(coinsData.getName() != null){
                        coinsViewHolder.setmNameTextView(coinsData.getName());

                    }

                    if(coinsData.getPrice() != null) {
                        coinsViewHolder.setmPriceTextView(coinsData.getPrice());
                    } else if(coinsData.getCap24hrChange() != null){
                        coinsViewHolder.setmPercentChangeTextView(coinsData.getCap24hrChange());}

                    coinsViewHolder.bind(coinsData);

                }
            };

            mRecyclerView.addItemDecoration(new MaterialViewPagerHeaderDecorator());
            mRecyclerView.setAdapter(mAdapter);
            MaterialViewPagerHelper.registerRecyclerView(getActivity(), mRecyclerView);


            return true;
        }
    });

    super.onCreateOptionsMenu(menu,inflater);
}

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

每次添加文本时都要设置适配器。在oncreate中移动适配器初始化,然后仅在文本更改时更新firebase查询。

如果您只想将新数据从数据库加载到回收站视图,请清除包含适配器数据的列表,然后调用然后添加新数据并调用notify dataset changed