2014-09-13 129 views
7

我是Andoid开发新手,我已经创建了一个片段,用于以编程方式替换片段。我跟着guide on android developersaddToBackStack(null)中null的用途是什么?

我创建了一个名为selectFrag方法,并发射它按一下按钮:

public void selectFrag(View view) 
{  
    Fragment fr;  

    if(view == findViewById(R.id.showsecond)) { 
     fr = new secondfragment(); 
    } else { 
     fr = new firstfragment(); 
    } 

    FragmentManager fm = getFragmentManager(); 

    FragmentTransaction ft = fm.beginTransaction(); 

    ft.replace(R.id.fragment_place,fr); 

    ft.addToBackStack(null); 

    ft.commit();  
} 

代码完美的作品,我明白,只是addToBackStack(null)一切。

我试验过,并且明白这个方法是为了将片段添加到后退按钮的堆栈中,所以如果我们点击返回按钮,它不会离开屏幕并显示以前的工作。

但是,我不明白null这里显示的是什么。我在网上搜索,但我只知道这是一个TAG,我们可以使用something like this

所以,我的问题很简单:这里null是什么意思?或者null做什么?

(对不起我的英语不好)

+0

@nem我知道什么是在Java中的空值,但我想知道为什么在addToBackStack()为空? “”这个“”方法中的null的目的是什么? – xyz 2014-09-13 09:32:02

回答

14

documentation,这是很清楚的:

public abstract FragmentTransaction addToBackStack (String name) 

本次交易添加到回栈。这意味着事务在被执行后将被记住,并且在稍后弹出堆栈时将反转其操作。

参数

name // An optional name for this back stack state, or null. 

所以你的参数是可选,并代表该片段的名称。

如果您只是想将此事务添加到后退堆栈并且以后不需要访问它,那么您可以将null作为名称。

在这种情况下,null用简单的英语表示“我不需要该片段的名称”。这就是为什么它说这个名字是可选的。如果你确实输入了名字,你可以稍后使用该名称。如果你把null只是意味着“将这个片段添加到后端堆栈,我不再需要它”。

使用该名称是为了识别该特定片段。如果你想获得从FragmentManager该片段这可能是有用的,例如:

addToBackStack (FRAGMENT_NAME); 
getFragmentMangager().findFragmentByTag(FRAGMENT_NAME); 
1

我认为你不应该使用.addToBackStack(NULL); 如果你试图弹出Backstack机会,它可能抛出 java.lang.IllegalStateException,因为它不会有有效的引用弹出最后添加的项目。这需要检查...我不是100%确定。

相关问题