Firebase查询未更新

Firebase查询未更新

本文介绍了Firebase查询未更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望根据用户在searchview中键入的内容更新firebase数据库链接,但除非打开另一个活动并跳回该链接,否则不会更新该链接.我在底部攻击了我的代码.那么,如何自动刷新呢?

I want my firebase database link to be updated depending on what the user keys in inside the searchview but the link is not updated unless I open another activity and jump back to it.I have attacked my code in the bottom. So how do I refresh it automatically ?

sv.setOnQueryTextListener(new SearchView.OnQueryTextListener()
    {
        @Override
        public boolean onQueryTextSubmit(String query) {
            query = sv.getQuery().toString();
            Toast.makeText(MainMenu.this,query, Toast.LENGTH_SHORT).show();
            makeItem();
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }

    });

 public void makeItem ()
{
    lv = findViewById(R.id.listView);
    db = FirebaseDatabase.getInstance().getReferenceFromUrl("https://vsem-inventory.firebaseio.com/ItemList").orderByChild("ProductName").startAt(query).endAt(query+"\uf8ff");
    FirebaseListOptions<ItemObject> options = new FirebaseListOptions.Builder<ItemObject>()
            .setLayout(R.layout.content_main_menu_list)
            .setQuery(db,ItemObject.class)
            .build();
    mAdapter = new FirebaseListAdapter<ItemObject>(options) {
        @Override
        protected void populateView(@NonNull View v, @NonNull ItemObject model, int position) {
            final TextView tvAmount = v.findViewById(R.id.amount);
            final TextView tvName = v.findViewById(R.id.name);
            final TextView tvSerial = v.findViewById(R.id.serialNo);
            final TextView tvSupplier = v.findViewById(R.id.supplierName);
            final ImageView more = v.findViewById(R.id.more);
            ImageView statusimg =  v.findViewById(R.id.status);
            Drawable paidIcon = v.getResources().getDrawable(R.drawable.succes);
            Drawable lateIcon = v.getResources().getDrawable(R.drawable.late);
            tvName.setText(model.getProductName());
            tvSerial.setText(model.getSerialNo());
            tvAmount.setText(model.getQuantity());
            tvSupplier.setText(model.getModel());
           final  String Remarks = model.getRemarks();
            final String cat = model.getCategory();
             if(model.getQuantity().equals("0"))
                statusimg.setImageDrawable(lateIcon);
            else
                statusimg.setImageDrawable(paidIcon);
            more.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v) {
                    String serialNo = tvSerial.getText().toString();
                    String itemName = tvName.getText().toString();
                    String quan = tvAmount.getText().toString();
                    String supplier = tvSupplier.getText().toString();
                    showMenu(itemName,more,serialNo,quan,supplier,cat,Remarks);
                }
            });
        }
    };

    lv.setAdapter(mAdapter);

}

推荐答案

标准方法是在将适配器设置为列表视图之后调用notifyDataSetChanged().

The standard way is to call notifyDataSetChanged() after setting your adapter to your list view

mAdapter.notifyDataSetChanged();

尽管我已经看到某些情况,仅使用此命令无效,并且必须遵循这两个命令.

Although I have seen some situations where only using this does not work and must be followed by these 2 commands.

lv.invalidateViews();
lv.scrollBy(0, 0);

如果其他所有方法都失败了,那么您可以选择毁掉并重新绘制列表视图,这是唯一可行的选择.

And if all else comes to fail falling back on destroying and redrawing the list view might be your only viable option.

lv.destroyDrawingCache();
lv.setVisibility(ListView.INVISIBLE);
lv.setVisibility(ListView.VISIBLE);

看了一会儿之后,我刚刚注意到您缺少Firebase的侦听器.我假设您已经像列表一样在某个位置放置了它们,但是刷新功能失败了,您可以尝试在完成查询后重新启动侦听器.

EDIT : After looking at it a while more I just noticed you're missing listeners for your firebase. I assume you already have them somewhere as you already have the list but failing your refresh functions, what you can try is restarting the listeners whenever you're done with a query.

lv.setAdapter(mAdapter);
mAdapter.stopListening();
mAdapter.startListening();

这篇关于Firebase查询未更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 03:44