如何识别当前片段?

时间:2013-08-14 13:14:22

标签: android android-fragments fragment

我的问题不容易描述,但我会尽我所能:

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

现在,当我单击detailFragment B上的按钮时,片段将与infoFragment类型中的新Fragment交换。左侧的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 个答案:

答案 0 :(得分:3)

使用FragmentTransaction向片段管理器添加Fragment时,您可以指定键值。然后,您可以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
} 

答案 1 :(得分:2)

MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment.isVisible()) {
  // add your code here
}

来自Here

答案 2 :(得分:1)

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

现在我们可以通过getClass

获取片段名称
fragment.getClass().getSimpleName()

答案 3 :(得分:0)

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