0

我试图改变在控制台火力数据库,但在我的适配器不变的数据,当应用程序被关闭recylerview只改变并再次打开为什么实时数据库不能在我的recyclerview工作

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private List<ModelDB> dbList = new ArrayList<>(); 
    private AdapterDB adapter; 
    private RecyclerView recyclerView; 
    FirebaseDatabase database; 
    DatabaseReference reference; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     initFirebase(); 
     getData(); 
     initRecylerView(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main_menu,menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.add_person: 
       Intent intent = new Intent(getApplicationContext(),RegisterActivity.class); 
       startActivity(intent); 
       break; 
      default: 
       Toast.makeText(getApplicationContext(),"lalalala",Toast.LENGTH_LONG).show(); 
       break; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void initFirebase(){ 
     database = FirebaseDatabase.getInstance(); 
     reference = database.getReference("user"); 

    } 


    private void initRecylerView(){ 
     recyclerView = (RecyclerView)findViewById(R.id.rv_list); 
     recyclerView.setHasFixedSize(true); 
     adapter = new AdapterDB(dbList); 
     recyclerView.setAdapter(adapter); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
     recyclerView.setLayoutManager(layoutManager); 
    } 


    private void getData() { 
     reference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       //loop data all user 
       for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 

        //instance object to get and set data 
        ModelDB modelDB = postSnapshot.getValue(ModelDB.class); 

        //adding data list from object 
        dbList.add(modelDB); 

       } 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
    } 

} 

AdapterDB.java

public class AdapterDB extends RecyclerView.Adapter<AdapterDB.MyViewHolder> { 

    private List<ModelDB> modelDBList; 

    public AdapterDB(List<ModelDB> modelDBList) { 
     this.modelDBList = modelDBList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_data,parent,false); 
     return new MyViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     ModelDB modelDB = modelDBList.get(position); 
     holder.tv_nama.setText(modelDB.getNama()); 
     holder.tv_alamat.setText(modelDB.getAlamat()); 

    } 

    @Override 
    public int getItemCount() { 
     return modelDBList.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 

     TextView tv_nama, tv_alamat; 

     public MyViewHolder(View itemView) { 
      super(itemView); 

      tv_nama = (TextView) itemView.findViewById(R.id.tv_nama); 
      tv_alamat = (TextView) itemView.findViewById(R.id.tv_alamat); 
     } 
    } 
} 
+1

你尝试'插入新项目后''adapter.notifyDataSetChanged();'? – ZeroOne

回答

2

你需要那种让适配器知道数据已经改变,而且UI具有被刷新或whatev呃。该OnDataChange在你的代码应该是这样的(检查方法中的最后一行) -

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    //loop data all user 
    for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 

     //instance object to get and set data 
     ModelDB modelDB = postSnapshot.getValue(ModelDB.class); 

     //adding data list from object 
     dbList.add(modelDB); 
     adapter.notifyDataSetChanged(); 
    } 

} 

这应该做的伎俩假设没有其他错误代码中的其他一些地方

+0

当我添加功能adapter.notifyDataSetChanged(); recyclerview将更新数据,但数据变成旧数据+新数据 –

+0

这就是我在我的答案中的意思,当我说你的代码中没有其他错误:)。顺便说一下,我认为'dbList'应该是一个集合而不是一个列表,这就是为什么你在视图中看到重复的对象。但这是一个猜测,因为我没有真正执行你的代码。 – Dibzmania

+0

谢谢先生我在数据发生变化时通过添加dbList.clear解决了问题:D –

相关问题