#java #android #android-adapter
#java #Android #android-адаптер
Вопрос:
Я пытаюсь переопределить notifyDataSetChanged, чтобы просто вызвать super.notifyDataSetChanged , но я хочу заставить это произойти в основном потоке пользовательского интерфейса.
У меня есть
@Override
public void notifyDataSetChanged() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
super.notifyDataSetChanged();
}
});
}
Но я получаю сообщение об ошибке , которое The method notifyDataSetChanged() is undefined for the type Object
. Что является причиной этого и как правильно это исправить?
Комментарии:
1. Пожалуйста, опубликуйте весь класс, я думаю, вы пропустили
extends
.
Ответ №1:
Предполагая, что ваш класс адаптера структурирован примерно так:
public class MyAdapter extends BaseAdapter {
private Activity mActivity;
public MyAdapter(Activity activity) {
super(activity);
mActivity = activity;
}
@Override
public void notifyDataSetChanged() {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
super.notifyDataSetChanged();
}
}
}
}
В тот момент, когда вы вызываете super.notifyDataSetChanged()
, вы находитесь в контексте нового анонимного Runnable
класса, поэтому вызов super
пытается найти суперкласс этого выполняемого объекта, а не адаптер, чего вы и ожидаете.
Вам нужно указать, что вы ищете Adapter
суперкласс класса:
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
MyAdapter.super.notifyDataSetChanged();
}
}
Комментарии:
1. Спасибо! В этом есть смысл. 1 за объяснение!