Reputation: 105
I REALLY have read all examples of the same problem but nothing helps I think mistake somewhere in another place. So the problem is that methods of recyclerview doesn't execute and list doesnt populate with data. Example I took from this place https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md
Also I checked this page https://github.com/happysingh23828/TheHappyChat/blob/master/app/src/main/java/happysingh/thehappychat/AllUsers.java Here is the code of the class
public class UsersActivity extends AppCompatActivity {
//Layout
private Toolbar mToolbar;
private RecyclerView mUserList;
//Firebase
private DatabaseReference mUsersDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users);
//Layour
mToolbar = (Toolbar) findViewById(R.id.users_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("All Users");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mUserList = (RecyclerView) findViewById(R.id.users_list);
// mUserList.setHasFixedSize(true);
mUserList.setLayoutManager(new LinearLayoutManager(this));
//Firebase
mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
}
@Override
protected void onStart() {
super.onStart();
Log.v("=====> IN ON START", "in onstart");
Query query = mUsersDatabase
.limitToLast(20);
FirebaseRecyclerOptions<Users> options =
new FirebaseRecyclerOptions.Builder<Users>()
.setQuery(query, Users.class)
.build();
//Pass model + viewholder
//Pass model / layout of item / ViewHolder / reference to Databace place
FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter
<Users, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {
String s = model.getName().toString();
Log.v("=====> ", " " + s);
holder.setName(model.getName());
holder.setStatus(model.getStatus());
holder.setImage(model.getImage());
}
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.user_item, parent, false);
Log.v("=====> ", "Creating View Holder ");
return new UsersViewHolder(view);
}
};
mUserList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
public static class UsersViewHolder extends RecyclerView.ViewHolder {
View view;
Context c;
public UsersViewHolder(View itemView) {
super(itemView);
view = itemView;
}
public void setName(String name) {
TextView txtUserName = (TextView) view.findViewById(R.id.user_single_name);
txtUserName.setText(name);
}
public void setStatus(String status) {
TextView txtstatus = (TextView) view.findViewById(R.id.user_single_status);
txtstatus.setText(status);
}
public void setImage(final String image) {
final CircleImageView img = (CircleImageView) view.findViewById(R.id.user_single_img);;
// Picasso.with(c).load(image).into(img);
Picasso.with(c).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(img, new Callback() {
@Override
public void onSuccess() {
// Offline Download
}
@Override
public void onError() {
Picasso.with(c).load(image).into(img);
}
});
}
public View getView() {
return view;
}
}
}
Upvotes: 0
Views: 83
Reputation: 138824
To solve this, move all the code from your onStart()
method inside onCreate()
method, except these two lines of code:
super.onStart();
firebaseRecyclerAdapter.startListening();
And remove the static
keyword from your UsersViewHolder
class definition. It must be only:
public class UsersViewHolder extends RecyclerView.ViewHolder {}
Upvotes: 1