2015-10-07 88 views
1

我使用下面的代碼通過按下返回按鈕從下一個片段中恢復主屏幕片段。現在,我想知道如何從應用程序中退出,當我從主頁片段中單擊後退按鈕時。當我按下我的第一個片段上的後退按鈕時,應用程序應退出

public void onBackPressed() { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.container, homefragment, LearnSourastraUtils.HOME_FRAGMENT_TAG); 
     ft.commit(); 
    } 

回答

0

我想你應該創建一個類似片段的可變檢查位置:

int position; 

併爲您在onBackPressed的位置,如果位置= 0,則退出該應用程序:

public void onBackPressed() { 
    if(position!=0) 
    { //Do something 
    } 
    else finish(); 
} 
0

這裏是我所做的:

@Override 
public void onBackPressed() 
{ 
    if(fragment_num != 0) 
    { 
     displayView(0); 
    } 
    else 
    { 
     super.onBackPressed(); 
    } 
} 

但你應該定義fragment_num變量作爲一個全局變量,可以從這裏得到它。 把這個放在你的活動中有碎片,這段代碼適用於我,當我點擊返回按鈕時,它會去到碎片num 0,如果你在那個碎片中,應用程序將被關閉。

0

我已經在上一篇文章中提到過這個問題,但我會再次發佈。

在你改變片段的部分,做這樣的事情:

currentFragment = fragmentToDisplay; 

現在,在您onBackPressed,以最快的方式,添加以下內容:

if (currentFragment == homefragment){ 
    super.onBackPressed(); 
    return; 
} 
0

在活動將這個在其中添加或替換片段

@Override 
public void onBackPressed() { 
if (getSupportFragmentManager().getBackStackEntryCount() == 1) { 
     finish(); 
} else {     
    getSupportFragmentManager().popBackStack(); 
} 
} 
0

您可以使用此

public void onBackPressed() { 
    // TODO Auto-generated method stub 
    getActivity().moveTaskToBack(true); 
    getActivity().finish(); 

    super.onBackPressed(); 
} 

公共布爾moveTaskToBack(布爾非根)

在API級別1移動包含該活動的活動堆棧的 背面的任務。任務內的活動順序爲 未更改。

參數nonRoot如果爲false,則僅當該活動爲 任務的根時才起作用;如果屬實,它將適用於任務中的任何活動。 返回如果任務已移動(或已在後面),則返回true,否則返回 ,否則返回false。

請檢查生命週期過程

http://developer.android.com/intl/es/reference/android/app/Activity.html

0

這是行不通的。您應該從後臺堆棧中彈出最後一個條目,而不要按後退鍵執行碎片事務。將您的代碼更改爲:

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager = getFragmentManager(); 
    if (fragmentManager.getBackStackEntryCount() != 0) { 
     fragmentManager.popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
相關問題