2014-03-06 57 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

如果您将片段从一个活动导航到第二个活动的片段,则会发生这种情况。在替换你的片段时,你将它们添加到后台堆栈中,所以不要将相应活动的第一个片段添加到后台堆栈中。