Navigation Architecture Component как назначить onClick
Есть 2 Fragment Main_Fragment_Menu_list и BlankFragment я соединил их в navigation и у меня появился action в котором есть пункт назначения и id. В Main_Fragment_Menu_list есть TextView. Как сделать так чтобы по нажатию на TextView у меня появился BlankFragment?
Я пытался написать что-то что мне казалось похожим но это не правильно.
Java Main_Fragment_Menu_list
public class Main_Fragment_Menu_list extends Fragment {
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.main_fragment_menu_list, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
textView = requireView().findViewById(R.id.button_task);
textView.setOnClickListener(Navigation.findNavController(view)
.navigate(R.id.action_navigation_menu_list_to_blankFragment));
}
}
Ответы (1 шт):
Смотрите, что такое onClickListener()? Это колбек который выполняется при нажатии на какую-либо View. Т.е. здесь вы задаете действие которое выполнится, когда пользователь тапнет по вашей View.
Что такое NavigationComponent? Это фреймворк для работы с фрагментами. Он позволяет более удобно работать с фрагментами: открывать новый фрагмент, видеть их иерархию визуально и в целом просто удобная обертка, ничего больше. Никакой магии там нет.
Теперь о вашем вопросе. Клики и фрагменты это вещи из разных областей и связи между ними в вашем вопросе как таковой быть не должно. Если вас смущает setOnClickListener() на TextView, то расслабьтесь, в этом ничего страшного нет. Если вас смущает, что при клике открывается фрагмент, то тут тоже нет ничего страшного. А как по-вашему в приложениях открываются новые экраны при кликах на кнопку?
UPD:
Вы немного неправильно реализуете ваш клик листенер. Метод setOnClickListener() на вход должен принимать экземпляр класса View.OnClickListener(). И тут вы либо создаете класс и в нем реализуете метод onClick(), а в листенер кладете его экземпляр. Либо реализуете анонимный класса, что-то вроде такого:
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(view)
.navigate(R.id.action_navigation_menu_list_to_blankFragment)
}
});
либо так если у вас есть Java 8:
textView.setOnClickListener(v -> Navigation.findNavController(view)
.navigate(R.id.action_navigation_menu_list_to_blankFragment));