我的问题不容易描述,但我会尽我所能:
在我的平板电脑应用中,我有一项活动,左侧是listFragment
A,右侧是detailFragment
B.因此,当我单击列表中的某个项目时,detailFragment
会显示所选(列表)项目的正确详细信息。
现在,当我单击detailFragment
B上的按钮时,片段将与infoFragment类型中的新Fragment
交换。左侧的listFragment
保持不变。
现在,当我点击列表中的其他项目时,我希望infoFragment
消失并再次获得detailFragment
。
我的问题是,如果目前显示infoFragment
或detailFragment
,我需要进行某种检查。这样我就可以刷新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();
答案 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()
来获取片段类并检查它是哪一个。