Как получить представление для класса, расширяющего класс, расширяющего фрагмент / активность и т. Д. - PullRequest
0 голосов
/ 26 октября 2019

У меня есть проблема, где у меня есть:

класс x, который расширяет y

и класс y, который расширяет фрагмент

Я хочу быть в состоянии сделать что-то вх, например, получить текстовое представление с идентификатором и изменить текст. Чтобы сделать это, я должен получить представление, но у меня есть проблемы. Я пробовал Super.getView и пытался сохранить представление в y и доступ из x, но он не работает.

Почему это так?

edit: пример кода:

public x extends fragment{

}

public y extends x{
    public y(){
         eg TextView t = this.getView().getById(...)
         which will fail as cant get the view
    }
}

1 Ответ

0 голосов
/ 31 октября 2019

Я бы сохранил TextView как защищенную переменную в классе, который расширяет фрагмент, чтобы у вас был доступ к нему из его подклассов:

public class x extends Fragment {
    protected TextView myTextView;

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        myTextView = view.findViewById(...);
    }
}

public class y extends x {
    public void y() {
        if (myTextView != null) {
            myTextView...
        }
    }
}

Имейте в виду, что у него будет только myTextViewприсваивается после того, как onViewCreated вызывается для этого фрагмента, но вы можете проверить, был ли он определен (он не равен нулю), прежде чем делать то, что вам нужно.

PS: в случае расширения Activity этоможно присвоить в методе onCreate, вызвав метод findViewById этого действия:

public class x extends Activity {
    protected TextView myTextView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....

        myTextView = findViewById(...);
    }
}
...