не может ссылаться на это до того, как был вызван конструктор супертипа

В последнее время у меня возникли проблемы с некоторым кодом:

public class SightsAdapter extends ArrayAdapter<Sights> {

    static int mColorResourceId;

    public SightsAdapter(ArrayList<Integer> sights, int colorResourceId) {
        super(this, 0, sights);
        mColorResourceId=colorResourceId;
    }
}

Я уже пытался использовать статический метод в классе Sights java, но я все еще получаю подчеркнутое this и сообщение об ошибке, говорящее

не может ссылаться на "это" до вызова конструктора супертипа

PS Я уже рассмотрел другие вопросы этого типа, и они мне не особо помогли. Я полный новичок здесь, поэтому, если кто-то может объяснить мне, что я делаю неправильно, буду очень признателен.


person Mimsy    schedule 10.07.2017    source источник
comment
Почему вы хотите передать this конструктору суперкласса? Конструктор суперкласса уже имеет доступ к this.   -  person Eran    schedule 10.07.2017
comment
Попробуйте объяснить, почему (= зачем) вы хотите передать this конструктору super. Какую цель вы хотите достичь, делая это?   -  person Honza Zidek    schedule 10.07.2017
comment
А почему вы хотите присвоить значение статическому полю mColorResourceId в конструкторе? Я сомневаюсь, что это то, что вы действительно хотели... Есть случаи использования, когда вы можете захотеть присвоить статическую переменную в нестатическом методе, но вы должны знать, что вы делаете, когда делаете это :)   -  person Honza Zidek    schedule 10.07.2017


Ответы (1)


Похоже, вы не знаете, что передать конструктору super (принадлежащему ArrayAdapter ) в качестве первого параметра Context.

Например, здесь у вас есть пример, основной часть такова:

public class SightsAdapter extends ArrayAdapter<Sights> {

    public SightsAdapter(Context context, ArrayList<Integer> sights, int colorResourceId) {
        super(context, 0, sights);
        ...
    }
}

Context должно приходить извне, ваш SightsAdapter должен получать его как параметр. В этом заключается концепция контекста в приложениях: это что-то, что внедряется из среды, в которой приложение/объекты работают в данный момент.

person Honza Zidek    schedule 10.07.2017
comment
Я уже делал это раньше, но снова получил сообщение об ошибке, в котором говорилось, что не удается разрешить метод «super (android.app.Activity, int, java.util.ArrayList‹java.lang.Strings›)» - person Mimsy; 10.07.2017
comment
метод? Покажите нам этот код, потому что super(...) — это не метод. Если вы обманули компилятор, заставив его думать, что это вызов метода, значит, вы сделали что-то странное, чего не показываете нам. Покажи нам свой код. - person Lew Bloch; 10.07.2017