Android 持续更新RecyclerView上的firebase数据
当我添加数据时,我希望我获取的数据能够立即更新。我正在从Firebase房间中提取数据,并希望在添加新房间时在RecyclerView中更新数据。使用Getroom功能,我从Firebase中提取数据并将其传输到RecyclerView。我正在使用AddRoom添加房间。添加房间时,我希望立即添加RecyclerView中的数据。所以我想通过不断地从Firebase中提取数据来更新Android 持续更新RecyclerView上的firebase数据,android,Android,当我添加数据时,我希望我获取的数据能够立即更新。我正在从Firebase房间中提取数据,并希望在添加新房间时在RecyclerView中更新数据。使用Getroom功能,我从Firebase中提取数据并将其传输到RecyclerView。我正在使用AddRoom添加房间。添加房间时,我希望立即添加RecyclerView中的数据。所以我想通过不断地从Firebase中提取数据来更新 public class RoomsActivity extends AppCompatActivity
public class RoomsActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private List<Rooms> roomList = new ArrayList<>();
private RecyclerView recyclerView;
private RoomsAdapter mAdapter;
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = mDatabase.child("0").child("Rooms");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
recyclerView = (RecyclerView) findViewById(R.id.rvRooms);
mAdapter = new RoomsAdapter(roomList);
recyclerView.setAdapter(mAdapter);
getRoom();
}
public boolean onOptionsItemSelected(MenuItem item) { if (id == R.id.add_rooms) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(RoomsActivity.this);
LayoutInflater inflater = RoomsActivity.this.getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.rooms_dialog, null);
dialogBuilder.setView(dialogView);
final EditText edt = (EditText) dialogView.findViewById(R.id.edit1);
dialogBuilder.setTitle("Oda Ekle");
dialogBuilder.setMessage("Eklemek istediğiniz odanın adını yazınız");
dialogBuilder.setPositiveButton("Ekle", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
final String roomsText = edt.getText().toString();
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("0"); rootRef.child("Rooms").child(roomsText).setValue(roomsText);
}
});
dialogBuilder.setNegativeButton("İptal", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
AlertDialog b = dialogBuilder.create();
b.show();
}
return super.onOptionsItemSelected(item);
}
private void getRoom() {
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
String data = snapshot.getValue(String.class);
Rooms getdata = new Rooms(data);
if (!roomList.contains(getdata)) {
roomList.add(getdata);
}
mAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
公共类RoomsActivity扩展了AppCompative活动实现了NavigationView.OnNavigationItemSelectedListener{
private List roomList=new ArrayList();
私人回收站;
私人房间公寓;
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference();
DatabaseReference=mDatabase.child(“0”).child(“房间”);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
recyclerView=(recyclerView)findViewById(R.id.rvRooms);
mAdapter=新房间dapter(房间列表);
recyclerView.setAdapter(mAdapter);
getRoom();
}
公共布尔值onOptionsItemSelected(菜单项){if(id==R.id.add_){
AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(RoomsActivity.this);
LayoutInflater充气器=RoomsActivity.this.getLayoutInflater();
最终视图对话框视图=充气机。充气(R.layout.rooms\u对话框,空);
dialogBuilder.setView(dialogView);
最终EditText edt=(EditText)dialogView.findViewById(R.id.edit1);
dialogBuilder.setTitle(“Oda Ekle”);
dialogBuilder.setMessage(“Eklemek istediğinizing odanınıyazınız”);
dialogBuilder.setPositiveButton(“Ekle”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
最后一个字符串roomsText=edt.getText().toString();
final DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference().child(“0”);rootRef.child(“房间”).child(roomsText).setValue(roomsText);
}
});
dialogBuilder.setNegativeButton(“İptal”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
}
});
AlertDialog b=dialogBuilder.create();
b、 show();
}
返回super.onOptionsItemSelected(项目);
}
私人休息室(){
ref.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
String data=snapshot.getValue(String.class);
Rooms getdata=新房间(数据);
如果(!roomList.contains(getdata)){
添加(getdata);
}
mAdapter.notifyDataSetChanged();
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
您需要使用以下方法更改getroom()方法事件。并使用addListenerForSingleValueEvent方法进行一次性数据检索。如果需要连续数据,则需要更改方法
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User bruceWayne = dataSnapshot.child("371298").getValue(User.class);
// Do something with the retrieved data or Bruce Wayne
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("UserListActivity", "Error occured");
// Do something about the error
});