Обработать кнопку "Назад" на панели инструментов с помощью компонента "Навигация"
Я следую единовременному подходу. У меня есть панель инструментов навигации, всякий раз, когда я перехожу к другим экранам (фрагментам) вместо значка гамбургера, у меня будет стрелка назад.
Я хочу добиться, чтобы мой текущий фрагмент был вытянут, используя действие при нажатии стрелки назад на панели инструментов.
я пытался
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
NavHostFragment.findNavController(EventDetailsFragment.this)
.navigate(R.id.action_nav_event_details_to_nav_home);
}
});
Но не получая звонка, я проверил, запустив приложение в режиме отладки.
5 ответов
В Activity
создать:
val appBarConfiguration = AppBarConfiguration(navController.graph)
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
а также:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == android.R.id.home) {
onBackPressed()
return true
}
return true
}
затем в вашем фрагменте:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callback: OnBackPressedCallback =
object : OnBackPressedCallback(true /* enabled by default */) {
override fun handleOnBackPressed() {
//do what you want here
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
Добавьте этот код в родительскую активность
Добавить метод onCreate
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Добавьте этот метод также в родительскую активность
@Override
public boolean onSupportNavigateUp() {
return super.onSupportNavigateUp();
}
Если вы используете
custom toolbar
в вашем xml вы можете рассмотреть возможность использования нижеприведенного подхода
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat)
setSupportActionBar(activity_chat_toolbar)
activity_chat_toolbar.setNavigationOnClickListener {
onBackPressed() <-- custom toolbar's back press
}
val navHostFrag =
supportFragmentManager.findFragmentById(R.id.chat_fragment_container_view) as NavHostFragment
navController = navHostFrag.navController
navController.setGraph(R.navigation.chat_nav_graph, intent.extras)
setupActionBarWithNavController(navController)
}
// Function to check startDestination to finish() the parent activity
override fun onBackPressed() {
if(navController.graph.startDestination == navController.currentDestination?.id) {
finish()
} else {
super.onBackPressed()
}
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
Я следую приведенному ниже руководству, и он отлично работает для меня
Дайте мне знать, работает ли это для вас?
Toolbar toolbar = findviewbyid(R.id.toolbar);
toolbar.setnavigationonclicklistener(new view.onclicklistener(){
code here
});
setsupportactionbar(toolbar);