I have seen many answers regarding this issue, but nothing works for my coding.
I referred the codes based on this youtube videos and now I have this issue. Not sure how his code works and mine don't. Apparently I'm also new into this topic (RecyclerView).
This is my main activity :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_product) ;
ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").child("Products");
recyclerView = findViewById(R.id.stallproductRecyclerView);
//newest
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
recyclerView.setHasFixedSize(true);
//
searchView = findViewById(R.id.searchProductStall);
}
@Override
protected void onRestart() {
super.onRestart();
if (ref!=null)
{
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren())
{
list.add(ds.getValue(Model.class));
}
ViewHolder viewHolder = new ViewHolder(list);
recyclerView.setAdapter(viewHolder);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ViewProduct.this, databaseError.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}
and this is ViewHolder class.
ArrayList<Model> list;
public ViewHolder (ArrayList<Model> list)
{
this.list=list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_product,
viewGroup,false);
return new MyViewHolder(view);
}
Set adapter in oncreate()
with empty data
and after fetching
data you should call adapter.notifyDataSetChanged()
like following.
ViewHolder viewHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_product) ;
ref = FirebaseDatabase.getInstance().getReference().child("buddymealplanneruser").child("Products");
recyclerView = findViewById(R.id.stallproductRecyclerView);
//newest
LinearLayoutManager manager = new LinearLayoutManager(this);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
recyclerView.setHasFixedSize(true);
//
searchView = findViewById(R.id.searchProductStall);
// here you have to set the adapter to your recycler view
list = new ArrayList<>();
viewHolder = new ViewHolder(list);
recyclerView.setAdapter(viewHolder);
}
@Override
protected void onRestart() {
super.onRestart();
if (ref!=null)
{
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
// clear your previous data
list.clear();
for(DataSnapshot ds : dataSnapshot.getChildren())
{
list.add(ds.getValue(Model.class));
}
// here you have to notify you adapter that your data set is changed like below
viewHolder.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(ViewProduct.this, databaseError.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}