android - 屏幕旋转后未保存 fragment 状态(使用带选项卡的 ActionBar)

标签 android tabs android-fragments actionbarsherlock

我将此监听器用于选项卡,但当屏幕旋转时,所有 fragment 都会移动到初始状态:

public static class TabListener implements ActionBar.TabListener {

        private final Activity mActivity;
        /**
         * HashMap with tab tag and tab frament
         */
        private final HashMap<String, TabInfo> mTabs = new HashMap<String, TabInfo>();

        /**
         * Auxiliary class for storing tab info
         * 
         */
        static final class TabInfo {
            private final String mTag;
            private final Class<? extends Fragment> mClass;
            private Fragment mFragment;

            TabInfo(String tag, Class<? extends Fragment> class_) {
                mTag = tag;
                mClass = class_;
            }
        }

        public TabListener(Activity activity) {
            mActivity = activity;
        }

        public void addTab(String tag, Class<? extends Fragment> class_) {
            mTabs.put(tag, new TabInfo(tag, class_));
        }

        /* The following are each of the ActionBar.TabListener callbacks */

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // Check if the fragment is already initialized
            TabInfo tabInfo = mTabs.get(tab.getTag());

            Fragment prevFragment = ((SherlockFragmentActivity) mActivity)
                    .getSupportFragmentManager().findFragmentByTag(
                            (String) tab.getTag());
            if (prevFragment != null) {
                tabInfo.mFragment = prevFragment;
            }

            if (tabInfo.mFragment == null) {
                // If not, instantiate and add it to the activity
                tabInfo.mFragment = Fragment.instantiate(mActivity,
                        tabInfo.mClass.getName());
                ft.add(android.R.id.content, tabInfo.mFragment, tabInfo.mTag);
            } else {
                // If it exists, simply attach it in order to show it
                ft.attach(tabInfo.mFragment);
            }
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            TabInfo tabInfo = mTabs.get(tab.getTag());
            if (tabInfo.mFragment != null) {
                // Detach the fragment, because another one is being attached
                ft.detach(tabInfo.mFragment);
            }
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // User selected the already selected tab. Usually do nothing.
        }
    }

最佳答案

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

...

CustomFragment fragment;
if (savedInstanceState != null) {
    fragment = (CustomFragment) getSupportFragmentManager().findFragmentByTag("customtag");
} else {
    fragment = new CustomFragment();
    getSupportFragmentManager().beginTransaction().add(R.id.container, fragment, "customtag").commit(); 
}

...

}

试试这个,它一定会对你有帮助。

关于android - 屏幕旋转后未保存 fragment 状态(使用带选项卡的 ActionBar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14278195/

相关文章:

java - 从 Fragment 调用方法

java - 为什么 Android Studio 中的按钮 "Commit"是灰色的?

android - 如何克隆一个 Parcel 对象

java - E/SQLite日志: (1) table keyTable has no column named number

visual-studio - 如何在 Visual Studio 2015 中很好地禁用文档?

给定用户输入整数的 C++ 打印空格或制表符

android - 可以在 ListFragment 上以编程方式添加 ImageView 吗?

android - 如何让 toast 在不扩展 Activity 的类里面工作?

css - Bootstrap 选项卡左侧高度

android - 将数据从一个 fragment 中的 Textview 发送到两个不同 Activity 中的另一个 fragment