我有一个ListView的Activity,当点击列表项时会打开一个新的片段。 我是否每次都需要创建一个新片段?
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.root_layout,new MyFragment());
或者足以创建一个片段然后再使用它?
活动:
MyFragment myFragment = new MyFragment();
......
onItemClickListener中的:
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.root_layout,myFragment);
答案 0 :(得分:1)
不,您不需要每次都创建它。首先,使用“替换”而不是使用“添加”。如果片段管理器中没有片段,则会添加片段,而不是替换它。如果您使用“添加”,则可能会意外添加多个片段。
您应该检查片段管理器中的片段并调用内容更新方法。
示例:
myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.my_fragment);
if (myFragment == null) {
myFragment = MyFragment.getInstance(someDataIfNeeded);
fragmentManager.beginTransaction().replace(R.id.my_fragment, myFragment).commit();
} else {
myFragment.updateFragmentContent(someData);
}
答案 1 :(得分:1)
这取决于你的情况。在大多数情况下,每个列表项打开一个不同的片段(具有不同的数据)。然后你必须在你的片段中创建一个静态newInstance(Data mySerializableData)方法,在其中使用默认构造函数,在Fragment arguments See DetailFragment上传递数据,并在你的activity中使用fragmentTransaction.replace()来添加这个片段。 / p>
如果您不希望更改片段,则只能按照您的说法创建一次,但不需要在每次单击项目时添加它。所以一个创作,只有一个添加。
答案 2 :(得分:1)
每次都像这样检查那个片段的实例 -
在你的片段类中 -
public static final MyFragment newInstance()
{
MyFragment f = new MyFragment();
return f;
}
并在您的活动中想要创建片段 -
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.root_layout,MyFragment.newInstance());
这是一个很好的方式...