1

我的问题不好描述,但我会尽力而为:

在我的平板电脑应用程序上,我有一个活动,listFragment左侧是 A detailFragment,右侧是 B。因此,当我单击列表中的某个项目时,会detailFragment显示所选(列表)项目的正确详细信息。

现在,当我单击detailFragmentB 上的按钮时,片段将与Fragment来自类型 infoFragment 的新元素交换。listFragment 左侧保持原样。

所以现在,当我单击列表上的另一个项目时,我希望它infoFragment消失并detailFragment再次获得一个。

我的问题是,我需要某种检查当前是否显示infoFragmentdetailFragment显示。这样我就可以刷新detailFragment或停止infoFragment并构建一个新的detailFragment.

主意:

 if ( //detailFragment is active ) {
        updateContent();
 }
 else {
        FragmentManager.buildDetailFragment();
 }

现在已经摆弄了几个小时,任何帮助表示赞赏!

如何确定是否显示了 detailFragment 或 listFragment?

编辑: 我在这里用 infoFragment 更改了我的 detailFragment:

FragmentManager fm  = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.details_fragment);

fragment = new InfoFragment();
fm.beginTransaction()
  .replace(R.id.details_fragment, fragment)
  .commit();
4

4 回答 4

3

当您使用FragmentTransactionFragment将 a 添加到片段管理器时,您可以指定一个键值。然后,您可以findFragmentByTag确定是否已将具有该键值的值添加到片段管理器中。Fragment

只要您不使用一次ViewPager添加多个片段的结构或其他结构,搜索您的片段管理器是否包含按标签的片段将让您知道当前显示的是哪个片段。然后,您可以使用该搜索的结果来更新片段,因为结果是对片段本身的引用。

这意味着您可以通过FragmentActivity调用任何可公开访问的片段方法直接将数据从片段传递到片段。例如

Fragment displayedFragment = fragmentManager.findFragmentByTag(TAG);
if(displayedFragment != null){ //null if no fragment with tag value       
    displayedFragment.updateList() //public method within fragment
} 
于 2013-08-14T13:21:01.910 回答
2
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment.isVisible()) {
  // add your code here
}

这里

于 2013-08-14T13:16:10.253 回答
1
FragmentManager fm  = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.content_id);

现在我们可以通过 getClass 获取片段名称

fragment.getClass().getSimpleName()
于 2015-06-04T12:47:54.773 回答
0

您可以通过调用获取片段类别并检查它到底是哪一个getClass()

于 2013-08-14T13:19:30.217 回答