Mic*_*idt 11 android android-fragments
我的应用程序以AddressFragment开头.从NavigationDrawer我开始(以及其他)一个新的 AddressFragment:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new AddressFragment())
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)
但我宁愿回到第一个实例.我怎么能这样做?
或者更一般,我怎样才能找出片段的实例是否已经存在然后开始,如果是,否则创建一个?
Sim*_*mas 20
在创建片段时为其设置标记,稍后您可以通过片段管理器找到它并相应地替换/创建.
FragmentManager fManager = getFragmentManager();
FragmentTransaction fTransaction = fManager.beginTransaction();
Fragment fragment = fManager.findFragmentByTag("uniqueTag");
// If fragment doesn't exist yet, create one
if (fragment == null) {
fTransaction.add(R.id.fragment_list, new ListFrag(), "uniqueTag");
}
else { // re-use the old fragment
fTransaction.replace(R.id.fragment_list, fragment, "uniqueTag");
}
Run Code Online (Sandbox Code Playgroud)
优化当前代码以允许Fragment拥有自己的"TAG"
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new AddressFragment())
.addToBackStack(**AddressFragment.class.getName()**)
.commit();
Run Code Online (Sandbox Code Playgroud)
在应用程序流程的某处,您需要确定是否存在片段:
public static boolean isFragmentInBackstack(final FragmentManager fragmentManager, final String fragmentTagName) {
for (int entry = 0; entry < fragmentManager.getBackStackEntryCount(); entry++) {
if (fragmentTagName.equals(fragmentManager.getBackStackEntryAt(entry).getName())) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
执行片段动作
if (exists) {
// Fragment exists, go back to that fragment
//// you can also use POP_BACK_STACK_INCLUSIVE flag, depending on flow
mFragmentManager.popBackStackImmediate(AddressFragment.class.getName(), 0);
} else {
// Fragment doesn't exist
// STEP 1 + additional backstack management
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14438 次 |
| 最近记录: |