Android фрагмент навигации без нажатия кнопки - PullRequest
1 голос
/ 19 февраля 2020

Я использую проект «Навигация по ящику» с использованием фрагментов, и пока этот метод работает:

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Navigation.findNavController(view).navigate(R.id.nav_gallery);
        }
    });

Но я хочу использовать метод навигации внутри класса фрагмента, вызывающего такую ​​функцию:

boolean b;
public void fragmentNavigation() {
    if (b) {
        Navigation.findNavController(getView()).navigate(R.id.nav_gallery);
    } 
}

Я новичок ie, использующий архитектуру навигации, и я до сих пор не знаю, нужно ли мне объявить какой-либо тип прослушивателя действий для этой функции или как заставить ее работать.

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете сделать это, но будьте осторожны с:

  1. , используя getView() is Nullable ; поэтому вы должны убедиться, что ваш фрагмент уже создал представление.

Это можно решить двумя способами

Первое: Переопределение onViewCreated (), который имеет ненулевой аргумент представления

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

}
boolean b;
public void fragmentNavigation(View view) {
    if (b) {
        Navigation.findNavController(view).navigate(R.id.nav_gallery);
    } 
}

Секунда: Создайте поле просмотра в классе фрагмента и установите его в onCreateView()

View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.main_fragment, container, false);
    return view;
}

затем всегда вызывайте fragmentNavigation(view); в этом поле просмотра.

Ваш фрагмент размещен на NavHostFragment навигационного графика; так что вы можете избежать потенциала IllegalStateException
...