Я получаю некоторые данные из базы данных 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
Форум для тех, кто программирует под Android
1740128181
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 не могут быть достигнуты после нанесения точек останова .. идея, что здесь не так?
Подробнее здесь: [url]https://stackoverflow.com/questions/51741809/onbindviewholder-not-called-after-recyclerview-adapter-notifydatasetchanged[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия