Fen*_*nil 10 java android android-layout android-fragments
我是Andoid开发的新手,我创建了一个代码片段来替换片段.
我按照Android开发人员的指南.
我创建了一个名为的方法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();
}
Run Code Online (Sandbox Code Playgroud)
代码完美无缺,我理解除了之外的一切addToBackStack(null).
我试验并理解这个方法是将片段添加到后退按钮的堆栈中,这样如果我们单击后退按钮,它就不会离开屏幕并显示之前的工作.
但是,我不明白null这里有什么.我在网上搜索,但我只知道它是一个TAG,我们可以使用这样的东西.
所以,我的问题很简单:这里的意思是null什么?或者做null什么?
(对不起,我的英语不好.)
nem*_*035 15
从文档中可以很清楚地看出:
public abstract FragmentTransaction addToBackStack (String name)
Run Code Online (Sandbox Code Playgroud)
将此事务添加到后台堆栈.这意味着事务将在提交后被记住,并在稍后从堆栈中弹出时将反转其操作.
参数
name // An optional name for this back stack state, or null.
Run Code Online (Sandbox Code Playgroud)
因此,您的参数是可选的,表示片段的名称.
如果您只想将此事务添加到后台堆栈而不需要在以后访问它,那么您可以将其null作为名称.
在这种情况下,null用简单的英语表示"我不需要这个片段的名称".这就是为什么它说这个名字是可选的.如果您输入了名称,则可以稍后使用该名称.如果你放一个null只是意味着"将这个片段添加到后面的堆栈而我不再需要它".
名称的使用是识别该特定片段.例如,如果您想从以下位置获取该片段,这可能很有用FragmentManager:
addToBackStack (FRAGMENT_NAME);
getFragmentMangager().findFragmentByTag(FRAGMENT_NAME);
Run Code Online (Sandbox Code Playgroud)
小智 6
只是想澄清一下,在addToBackStack(name)中使用的“名称”不能通过调用fragmentManager.findFragmentByTag(tag)来检索片段。“标签”与“名称”不同。
在add / replace(id,fragment,tag)中使用的“标签”用于通过调用fragmentManager.findFragmentByTag(tag)来检索该片段。
但是,addToBackStatck(name)中使用的“名称”用于通过调用popBackStatck / Immediate(name,flags)来控制要将片段回弹到哪个片段。因此,如果我有一个带有命名片段的片段堆栈:A,B,C和D,底部带有A。当您调用popBackStack(B,XXX_EXCLUSIVE)时,您的片段返回堆栈将类似于:调用之后的A和B。没有名称,您将无法做到。
| 归档时间: |
|
| 查看次数: |
6920 次 |
| 最近记录: |