单击项目时,ListView打开片段的Android活动

时间:2014-10-17 06:32:44

标签: android fragment

我有一个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);

3 个答案:

答案 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());

这是一个很好的方式...