簡體   English   中英

使用片段通過底部導航欄關閉應用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM