Переопределение функции notifyDataSetChanged() не работает

#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 за объяснение!