繁体   English   中英

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

[英]Android activity with ListView open fragment on item click

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

不,您不需要每次都创建它。 首先,使用“替换”代替使用“添加”。 如果片段管理器中没有片段,则将添加您的片段,而是将其替换。 如果使用“添加”,则可能会意外添加多个片段。

您应该在片段管理器中检查片段,并调用方法来更新内容。

例:

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);
}

这取决于您的情况。 在大多数情况下,每个列表项都会打开一个不同的片段(具有不同的数据)。 然后,您必须在片段中创建一个静态newInstance(Data mySerializableData)方法,在其中使用默认构造函数,通过Fragment参数传递数据( 请参见DetailFragment),并在活动中使用fragmentTransaction.replace()来添加此片段。

如果您不希望更改片段,则只能按您的说明创建一次,但是无需在每次单击项目时都添加它。 因此,一次创建,一次添加。

每次像这样检查该片段的实例-

在您的片段类中-

public static final MyFragment newInstance()
{
    MyFragment f = new MyFragment();
    return f;
}

在您要创建片段的活动中-

 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
 fragmentTransaction.add(R.id.root_layout,MyFragment.newInstance());

这是很好的方式...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM