Java 如何附加()和分离()而不是添加()和删除()以保存片段视图
我为Java 如何附加()和分离()而不是添加()和删除()以保存片段视图,java,android,android-actionbar,savestate,Java,Android,Android Actionbar,Savestate,我为ActionBar提供了以下代码: private class MyTabListener implements ActionBar.TabListener { private Fragment mFragment; private final Activity mActivity; private final String mFrag; public MyTabListener( Activity activity, String fragName )
ActionBar
提供了以下代码:
private class MyTabListener implements ActionBar.TabListener
{
private Fragment mFragment;
private final Activity mActivity;
private final String mFrag;
public MyTabListener( Activity activity, String fragName )
{
mActivity = activity;
mFrag = fragName;
}
@Override
public void onTabReselected( Tab tab, FragmentTransaction ft )
{
// TODO Auto-generated method stub
}
@Override
public void onTabSelected( Tab tab, FragmentTransaction ft )
{
mFragment = Fragment.instantiate( mActivity, mFrag );
ft.add( android.R.id.content, mFragment );
}
@Override
public void onTabUnselected( Tab tab, FragmentTransaction ft )
{
ft.remove( mFragment );
mFragment = null;
}
}
我在那些选项卡中有一些文本框,在这些选项卡之间切换会使应用程序丢失我添加到这些文本框中的所有数据。我想使用保存片段状态的attach
和detach
而不是add
和remove
如何在我已有的代码中实现这一点
更新:
代码现在如下所示:
private class MyTabListener implements ActionBar.TabListener
{
private Fragment mFragment;
private final Activity mActivity;
private final String mFrag;
public MyTabListener( Activity activity, String fragName )
{
mActivity = activity;
mFrag = fragName;
}
@Override
public void onTabReselected( Tab tab, FragmentTransaction ft )
{
// TODO Auto-generated method stub
}
@Override
public void onTabSelected( Tab tab, FragmentTransaction ft )
{
//mFragment = Fragment.instantiate( mActivity, mFrag );
//ft.add( android.R.id.content, mFragment );
mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mFrag);
if( mFragment == null ) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mFrag);
} else {
ft.attach(mFragment);
}
}
@Override
public void onTabUnselected( Tab tab, FragmentTransaction ft )
{
//ft.remove( mFragment );
//mFragment = null;
if (mFragment != null) {
ft.detach(mFragment);
}
}
}
下面这一行有一个错误:
mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mFrag);
错误:
The method getSupportFragmentManager() is undefined for the type Activity
您可以使用SharedReferences
临时存储正在显示的变量,而不是重写代码
在要离开的选项卡的ondestory
方法中,只需将变量添加到首选项中,并在重新进入选项卡时检索它们
@Override
public void onDestroy(){
super.onDestroy();
Log.i("OnDestroy", "Logged");
SharedPreferences prefs = getActivity().getSharedPreferences("name", Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("stringName", stringToStore);
editor.commit();
}
我在这里给出的解决方案与中的完全相同。区别是什么?我只是在插入您的代码和预定义代码之间的变量时遇到了一点小麻烦:/您让它工作了吗?我认为您在这里缺少的关键组件是在执行ft.add(viewID,fragment,tag)
时的标记。我可以保持代码不变并添加标记吗?标签是什么?在这种情况下,标签是mFrag
。初始化TablListener时,您发送公共MyTablListener(活动,字符串fragName)
并设置mFrag=fragName
。您需要使用此标记来检索片段。