OnBindViewholder не называется после recyclerview adapter notifydatatchanged ()Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 OnBindViewholder не называется после recyclerview adapter notifydatatchanged ()

Сообщение Anonymous »

Я получаю некоторые данные из базы данных 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»