我正在使用android的导航架构组件进行演示。我有一个activity
和两个fragments
。
在活动的xml中,我添加了以下代码-
<fragment
android:id="@+id/main_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="@dimen/match_constraints"
android:layout_height="@dimen/match_constraints"
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/nav_graph" />
然后我将第一个片段设置为起始目的地。在第一个片段中,单击按钮后,我已完成以下操作-
NavHostFragment.findNavController(this).navigate(R.id.action_firstFragment_to_secondFragment)
它工作正常。现在,当我按系统的后退按钮时,理想情况下,我应该返回第一个片段,但是应用程序退出。我在做什么错了?
答案 0 :(得分:3)
我想这是在您的代码中发生的,因为您可能正在onBackPressed()
中某个地方处理BaseActivity
功能。请仔细看。
希望对您有所帮助。
答案 1 :(得分:0)
/** orrerride activity onBackPressed() **/
private boolean doubleBackToExitPressedOnce = false;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onBackPressed() {
int start = Navigation.findNavController(this, R.id.nav_host_fragment).getCurrentDestination().getId();
if (start == R.id.nav_home) {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(MainActivity.this, "Press back again to exits", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
} else {
super.onBackPressed();
}
}