Mar*_*her 6 android android-framework android-fragments
所以这是我的代码.'currentFragment'只是一个跟踪当前显示内容的字段.这是一个本身就是片段的类(所以我有一个显示片段的片段).
private void selectNavBarItem(NavbarItem v)
{
Fragment fragmentToUse = null;
if (v == setpointsNavItem)
{
fragmentToUse = setpointsFragment;
}
else if (v == rapidSetupNavItem)
{
fragmentToUse = rapidSetupFragment;
}
else if (v == outdoorResetNavItem)
{
fragmentToUse = outdoorResetFragment;
}
else if (v == rampDelayNavItem)
{
fragmentToUse = rampDelayFragment;
}
if (fragmentToUse != null)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (currentFragment != null)
{
ft.detach(currentFragment);
}
currentFragment = fragmentToUse;
if (currentFragment.isDetached())
{
ft.attach(currentFragment);
}
else
{
ft.add(R.id.setup_content_holder, currentFragment);
}
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
一切看起来都很棒,但是为所有片段(onCreateView()和onViewCreated())重新创建了视图.我希望附加和分离可行,但事实并非如此.我想维护视图的原因是当用户导航回来时用户的选择仍然存在.
另一种选择是显示和隐藏,但我不知道如何使这项工作,因为拥有此代码的片段有一个FrameLayout(R.id.setup_content_holder),它包含我想要添加的片段,我不能只是添加四个片段,但隐藏其中三个.有一个选项可以添加一个没有容器的片段,但我不知道它应该如何工作.
那么,有什么想法吗?
试试这个,这将解决你的frgment视图创建问题;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mFragmentView != null) {
((ViewGroup) mFragmentView.getParent()).removeView(mFragmentView);
return mFragmentView;
}
mFragmentView = inflater.inflate(R.layout.home_fragment, container, false);
..... // your remaining code
}
Run Code Online (Sandbox Code Playgroud)
小智 1
OnCreateView 方法始终在 Fragment 内调用。
为了解决您所描述的问题,您真正需要做的是保存片段的状态,然后当它返回时,应用程序将恢复您保存的内容。
例如(在相关片段类内):
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceStatePutString("userString", someTextView.getText().toString());
savedInstanceStatePutInt("userInt", userInt);
// etc...
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
someTextView.setText(savedInstanceState.getString("userString"));
userInt = savedInstanceState.getInt("userInt");
}
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您在片段之间跳转时的问题;当片段被推入或拉出堆栈时,应用程序将调用 onSaveInstanceState 和 onRestoreInstanceState。
然而,这并不能永远拯救他们!如果您需要更多持久存储,请考虑其他选项,例如保存到 sqlite 数据库。
| 归档时间: |
|
| 查看次数: |
3924 次 |
| 最近记录: |