0

我试图更改控制台 firebase 中的数据库,但我的适配器中的数据没有改变,recylerview 仅在应用程序关闭并再次打开时才更改

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);
        }
    }
}
4

1 回答 1

2

您需要让适配器知道数据已更改并且必须刷新 UI 或其他什么。您的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();
    }

}

假设代码的其他部分没有其他错误,这应该可以解决问题

于 2017-02-12T04:49:20.863 回答