Я получаю некоторые данные из базы данных Firebase, и я пытаюсь заполнить Adclerview адаптер. После того, как Adapter's notifyDatAsetchAnged () < /code> вызывается, мигает на экране и ничего не происходит, я даже не мог поймать точку останова внутри OnBindViewholder. < /P>
Вот мой код: < /p>
pojo class: < /p>
public class Result2 implements Serializable {
private int score;
private String userName;
public Result2(int score, String userName) {
this.score = score;
this.userName = userName;
}
public int getScore() {
return score;
}
public String getUserName() {
return userName;
}
< /code>
} < /p>
Это моя складка Activits, называемая Activity_Results.xml, которая содержит Recyclerview < /p>
< /code>
Вот моя адаптерная схема Viewholder с именем score_view_holder.xml < /p>
< /code>
< /p>
Таким образом, он будет содержать два горизонтальных текстовых обзоров и представление в виде строки ниже .. < /p>
Вот мой адаптер: < /p>
public class ScoreAdapter extends RecyclerView.Adapter {
private List results = new ArrayList();
public void setResults(List results) {
this.results.clear();
this.results.addAll(results);
notifyDataSetChanged();
}
@Override
public ScoreAdapter.ScoreViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.score_view_holder, parent, false);
return new ScoreAdapter.ScoreViewHolder(view);
}
@Override
public void onBindViewHolder(ScoreAdapter.ScoreViewHolder holder, int position) {
Result2 result = getResult(position);
if (result != null) {
holder.setUsername(result.getUserName() != null ? result.getUserName() : "-");
holder.setScore(String.valueOf(result.getScore()));
}
}
private Result2 getResult(int position) {
return !results.isEmpty() ? results.get(position) : null;
}
@Override
public int getItemCount() {
return results.size();
}
public class ScoreViewHolder extends RecyclerView.ViewHolder {
private TextView username;
private TextView score;
public ScoreViewHolder(View itemView) {
super(itemView);
username = itemView.findViewById(R.id.username);
score = itemView.findViewById(R.id.score);
}
public void setUsername(String username) {
this.username.setText(username);
}
public void setScore(String score) {
this.score.setText(score);
}
}
}
< /code>
он должен получить список объектов Result2 и просто установить текст в этих двух текстовых идеях (имя пользователя и оценка) < /p>
И, наконец, моя деятельность, где я пытаюсь уведомить адаптер от: < /p>
public class Results extends AppCompatActivity {
private DatabaseReference mDatabase;
private ScoreAdapter scoreAdapter;
private RecyclerView recyclerView;
private List results = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
recyclerView = findViewById(R.id.recycler_view);
scoreAdapter = new ScoreAdapter();
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(scoreAdapter);
mDatabase = FirebaseDatabase.getInstance().getReference();
loadResults();
}
private void loadResults() {
mDatabase.child("Users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
Result2 result = childSnapshot.getValue(Result2.class);
if (result != null) {
results.add(result);
}
}
Toast.makeText(Results.this, String.valueOf(results.size()), Toast.LENGTH_SHORT).show();
scoreAdapter.setResults(results);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
}
);
}
}
< /code>
Итак, после выполнения цикла, тост показывает правильное количество результатов, вызывается метод адаптеров Setresults, я получаю правильное количество результатов, вот картина: < / p>
< /p>
Но после того, как notifydatasetchant () вызван, экран просто мигает, и все пустые ... методы внутри Bindviewholder не могут быть достигнуты после нанесения точек останова .. идея, что здесь не так?
Подробнее здесь: https://stackoverflow.com/questions/517 ... setchanged
OnBindViewholder не называется после recyclerview adapter notifydatatchanged () ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Recyclerview onBindViewHolder вызывается для всех элементов в NestedScrollview.
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-