如何从Firebase数据库侦听器向ArrayList添加项



我使用ArrayList作为数据提供程序,带有RecyclerView(GridLayout管理器(。每当发生更改时,我都希望从Firebase事件侦听器将项添加到此ArrayList。但这些项目不会增加。这是代码:

private ArrayList<String> myDataset = new ArrayList<String>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView =  inflater.inflate(R.layout.fragment_nb, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new GridLayoutManager(getActivity(),2);
mRecyclerView.setLayoutManager(mLayoutManager);
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
myDataset.add("Data"); // does not add from here

// more code here. . .
} 
}     
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
//if i add the data here it works:
myDataset.add("Data");
return rootView;

您似乎创建了一个侦听器,但没有将其附加到任何DatabaseReference。因此,它从未被调用。如果您是Firebase的新手,请参阅文档。侦听器到引用的附件是触发查询和后续数据检索的原因。

还要记住,此检索是异步的,因此在最初设置适配器时,它将为空。稍后,myDataset的本地副本将由回调填充,但Adapter类中必须有一个方法,允许它更新其存储的ArrayList。然后,适配器将不得不调用notifyDataSetChanged(或类似方法(来更新显示。

您应该能够在网上找到许多关于这类功能的教程。

最新更新