我有简单的方法,我想将片段名称作为参数传递。 我有像
这样的片段1)AddNewDatesFragment
2)AskFragment
3)DisclaimerFragment
我有下面的代码可以按预期正常工作
FragmentManager fragmentManager = activity.getSupportFragmentManager();
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
Fragment fragment = (Fragment) fragmentManager.getBackStackEntryAt(entry);
if (fragment instanceof AddNewDatesFragment) {
Log.i("TAG", " Expected Fragment Found");
}
}
我想在方法中编写一些代码,我可以调用这样的方法
isExistFragment(AddNewDatesFragment);
isExistFragment(AskFragment);
isExistFragment(DisclaimerFragment);
等...
我已经尝试过这样的代码但是没有工作会在if条件下产生编译时错误。
private boolean isExistFragment(Class<Fragment> expectedFragment) {
FragmentManager fragmentManager = activity.getSupportFragmentManager();
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
Fragment fragment = (Fragment) fragmentManager.getBackStackEntryAt(entry);
if (fragment instanceof expectedFragment) {
Log.i("TAG", " Expected Fragment Found");
return true;
}
}
return false;
}
我很想实现这种方法。 谢谢,
答案 0 :(得分:1)
getBackStackEntryAt(index)
不返回Fragment本身,它返回BackStackEntry对象以获取受尊重的片段。
请查看http://developer.android.com/reference/android/app/FragmentManager.html#getBackStackEntryAt(int)
使用下面的代码片段从堆栈中检索片段:
Fragment fragment = (Fragment) fragmentManager
.findFragmentById(fragmentManager.getBackStackEntryAt(entry)
.getId());
在这里,首先获得受尊重的Fragement的BackStackEntry,通过它可以在特定位置获得片段的片段ID。 然后通过id,您可以轻松地检索片段。
答案 1 :(得分:0)
您可以使用:
expectedFragment.isAssignableFVrom(fragment.getClass())
如果true
类是exceptedFragment
类的接口或超类,请fragment
。(参见doc)。
(PS:你不能在fragment instanceof expectedFragment
上使用exceptedFragment
因为它是一个类而不是一个对象。)
答案 2 :(得分:0)
我认为类中import语句的问题扩展了你导入supportv4的FragmentActivity,并且在你检查import语句时导入了“import android.app.Fragment”的expectedFragment。
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
或 import android.app.Fragment;
答案 3 :(得分:0)
我不知道这是否是最佳方式。但我会将 tag 功能用于类似目的。
添加片段时,设置标记以供日后识别:
fragmentManager.beginTransaction()
.replace(R.id.container, newlyAddFragment, TAG_FOR_THE_FRAGMENT)
.commit();
并实现 isExistFragment ,如下所示:
boolean isExistFragment(String tag) {
Fragment targetFragment = fragmentManager.findFragmentByTag(tag);
return targetFragment != null;
}