【发布时间】:2013-07-31 13:52:28
【问题描述】:
我有以下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;
}
}
我在这些 Tab 片段中有一些文本框,并且在选项卡之间切换会迫使应用丢失我添加到这些文本框中的所有数据。而不是add 和remove,我想使用attach 和detach 来保存片段状态。
如何在我已有的代码中实现这一点?
更新:
现在的代码如下所示:
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
【问题讨论】:
-
我在这里给出的解决方案与stackoverflow.com/questions/16634247/… 完全相同。有什么区别?
-
我只是在插入您的代码和我的预定义代码之间的变量时遇到了一点麻烦:/
-
你让它工作了吗?我认为您在这里缺少的关键组件是您执行
ft.add(viewID,fragment,TAG)时的标签 -
我可以保留我的代码并添加标签吗? TAG 是什么?
-
在这种情况下,标签是
mFrag。初始化 TabListener 时,发送public MyTabListener( Activity activity, String fragName )并设置mFrag = fragName。您需要使用此标签来检索片段。
标签: java android android-actionbar savestate