数据结构:
factoryConfigs.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot != null && dataSnapshot.getValue() != null){
Log.i("onChildAdded", "onChildAdded " + dataSnapshot.toString());
try{
FactoryConfig config = dataSnapshot.getValue(FactoryConfig.class);
configs.add(config);
mFactoryList.scrollToPosition(configs.size());
mAdapter.notifyItemInserted(configs.size());
}catch (Exception e){
Log.e("FactoryFragment", e.getMessage());
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.i("datachange", "dataChanged" + dataSnapshot.toString());
mAdapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我的factory_line数据会根据需要增加。 我需要知道数据库必须更改,以便我可以修改我的列表并通知适配器。我无法弄清楚如何找到数据已更改的适配器位置。
答案 0 :(得分:0)
获取适配器中项目的位置并应用use notifyItemChanged(int position)。
答案 1 :(得分:0)
我的建议是使用FirebaseRecyclerAdapter。 (https://medium.com/android-grid/how-to-use-firebaserecycleradpater-with-latest-firebase-dependencies-in-android-aff7a33adb8b)。现在,每次数据更改时,firebase回收器适配器都会自动更新,您无需致电notify。
在您的情况下:
Query queryReference = factoryConfigs.orderBy("business_name");
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter(FactoryConfig.class, R.id.recyclerItemLayout, viewHolderClass.Class, queryReference) {
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
FactoryConfig fc = getItem(position);
//populate recycler accordingly
}
};
使用上述适配器替换当前适配器