[英]Close app by bottom navigation bar using fragment
我正在使用底部導航欄。 當我單擊底部導航中的每個項目時,Fragment將替換為另一個。 當我想按回去時,我想退出應用程序。 我認為這很容易。
但是問題出在這里:在每個片段中我都有按鈕。 如果單擊按鈕,它將替換為另一個片段。 如果按后退按鈕,我想轉到底部導航欄中的上一個片段。 此后,如果用戶再次按回去,則應用程序應退出。 我該怎么辦?
我應該使用onBackPressed()
嗎?
我使用此代碼但無法正常工作
boolean pressBackForExit = false;
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0){
pressBackForExit = true;
}
if (pressBackForExit){
finish();
}
if (getSupportFragmentManager().getBackStackEntryCount() > 0){
getSupportFragmentManager().popBackStack();
if (getSupportFragmentManager().getBackStackEntryCount() == 0){
pressBackForExit = true;
}
}
}
如果是,請告訴我如何?
首先,您必須獲得現在所在的片段。 就像您只想從BottomFragments返回,然后將所有BottomFragments放在那里(如果是),則onBackPress();
Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container);
if (f instanceof NavBottomOneFragment ) {
onBackPressed();
}
嘗試使用以下代碼,將此代碼放在您的活動類中。 這是雙擊退出應用程序的代碼。
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Press again to exit..", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
這可以通過選擇兩個容器來完成,一個用於背景片段,即用於選項卡切換,第二個用於片段的按鈕單擊,假設容器ID是fragment_container,現在在您的活動onBackPressed方法中執行以下操作
@Override public void onBackPressed(){
Fragment frag = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (frag != null){ getSupportFragmentManager().beginTransaction().remove(frag).commit();
return;
}
super.onBackPressed();
}
1.重寫活動的onBackPressed()
方法
public void onBackPressed() {
finish()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.