2014-03-06 226 views
3

我在我的應用程序中使用片段。所以在主頁上我有一個5選項的網格視圖,我再次打開一個新的片段。OnBack按片段顯示空白屏幕

所以發生了什麼是背部按下它顯示一個空白的屏幕後,它正在關閉應用程序。

請告訴我我在這做錯了什麼。

mycode的

gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
        long arg3) { 
       if (DASHBOARD_LINKS[arg2].equals("A")) { 
        fragTran.replace(R.id.content_frame, 
           firstFrag); 
         fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
         fragTran.addToBackStack(null); 
         fragTran.commit(); 

       } 
       if (DASHBOARD_LINKS[arg2].equals("B")) { 
        fragTran.replace(R.id.content_frame, secondFrag); 
        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        fragTran.addToBackStack(null); 
        fragTran.commit(); 
       } 
       if (DASHBOARD_LINKS[arg2].equals("C")) { 
        fragTran.replace(R.id.content_frame, thirdFarg); 
        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        fragTran.addToBackStack(null); 
        fragTran.commit(); 
       } 
      } 
     }); 

請幫助我的這種情況正在發生

+0

這是因爲你只是'null'給你的'fragTran.addToBackStack(null);'方法 –

+0

所以我要做什麼這將你請建議我在這個 –

+0

東西我不明白在這但'fragTran.addToBackStack(「標籤」);'這爲我工作。 –

回答

12

我對你的建議是,讓addToBackStack(null)在片段調用。

但之後onbackpress你所得到的空白屏幕,希望這會爲你請從首頁此行 addToBackStack(null)

+7

雖然它是首選答案。我不明白你想說什麼 – Virtu

+1

謝謝,我知道自從問了這個問題之後的一年。但爲第一個過渡固定式礦取消'addToBackStack(null)'。 – Miqe

+0

@Developer,你的回答很混亂。我也想使用onBackstackchangedlistener,但是如果我刪除addToBackStack,那麼onBackstackchangedlistener永遠不會工作。 –

0

我假設你想處理後退按鈕按下。你可以做到以下幾點,

Fragments之間的轉換之前,請撥打addToBackStack()像下面,

fragTran.replace(R.id.content_frame, secondFrag); 
        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        fragTran.addToBackStack("TAG"); 
        fragTran.commit(); 

對於明確的信息,請參閱這篇文章https://stackoverflow.com/a/7992472/1665507

+0

同樣的問題,它顯示一個空白屏幕,然後關閉應用程序 –

+0

@PoojaDubey:嗯,我猜在你的代碼中有一些其他的問題,因爲上面的方式工作。你可以從這裏查看示例https://www.dropbox.com/s/iup67qfwkx5uzqo/FragmentsTest.rar –

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

顯示空白解決方案的片段。

  1. 確保添加第一個鹼基的片段沒有addToBackStack()方法。因爲它是負責導航返回。我們不想從第一頁返回。所以不要將它添加到backStack。
  2. 雖然從片段A移動到片段B如果已經調用fragmentTransacation.add然後,同時從正在添加乙回A. onViewCreatedonResume方法已經將一個片段到它不會調用。因此,爲了打onResumeonViewCreated,同時要回片段A.你應該叫fragmentTransaction.replace
+0

第一項解決我的問題,謝謝! – li2

1

addToBackStack()< --dont這包括你的第一個片段.-->

if(getSupportFragmentManager().getBackStackEntryCount() !=1){ 
       fragmentTransaction.addToBackStack("placeholder"); 
      } 
1

如果您將片段從一個活動導航到第二個活動的片段,則會發生這種情況。在替換你的片段時,你將它們添加到後臺堆棧中,所以不要將相應活動的第一個片段添加到後臺堆棧中。