метод init в нестатическом блоке Android - PullRequest
0 голосов
/ 17 мая 2018

Я расширяю ScrollView, и в нем я использовал нестатический блок после конструкторов для инициализации некоторых переменных.

Код

 public ScrollViewExtended(Context context) {
        super(context);
    }

    public ScrollViewExtended(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollViewExtended(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public ScrollViewExtended(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    private void init(Context context) {
        activity = (Activity) context;
        userActivityLogDao = new UserActivityLogDao();
        activity_name = activity.getClass().getSimpleName();
    }

    {
       init(getContext());
    }

Я не хочу вызывать init(контекст) метод в каждом конструкторе.Вот почему я использовал нестатический блок.Можете ли вы предложить, если это правильный способ сделать это?

* Я могу запустить этот код без каких-либо ошибок.

1 Ответ

0 голосов
/ 17 мая 2018

вы не можете использовать статический контекст.Если ваша проблема в том, что вы не хотите вызывать init в каждом конструкторе, просто используйте this вместо super ( явный вызов конструктора ).Например,

public ScrollViewExtended(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public ScrollViewExtended(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...