【问题标题】:Why doesn't the tabwidget remain modified?为什么 tabwidget 不保持修改状态?
【发布时间】:2011-07-05 19:45:31
【问题描述】:

在 android 中,我有一个 TabActivity (A),我在其中创建了一个名为 loading 的单个选项卡,带有 Activity B。

在 Activity B 中,我从 TabActivity A 修改 TabWidget,以通过对 TabActivity A 中 TabHost 的静态引用添加更多选项卡。

在我开始一个新活动 C 然后按 BACK 后,TabWidget 只有一个名为 Loading 的选项卡。

我尝试在活动 B 的 onResume 方法中重新创建选项卡,但它不再起作用了。

有谁知道为什么会这样,我该如何解决?

【问题讨论】:

    标签: android android-tabhost revert


    【解决方案1】:

    依赖指向 UI 组件的静态变量(如 TabHost)可能会导致内存泄漏。不要这样做。而是在TabActivity 中注册BroadcastReceiver 以添加新选项卡。这样,您无需修改​​静态变量,而是发送广播 (Context#sendBroadcast(Intent)) 来告诉选项卡活动您想要一个新选项卡。

    另外,请确保保存TabActivity 的状态,以便在 Android 操作系统因某种原因破坏您的活动时可以恢复它。我推荐使用onRetainNonConfigurationInstance... 类似这样的东西:

    private State mState;
    public void onCreate(Bundle b){
        // somewhere in onCreate
        mState = (State) getLastNonConfigurationInstance();
        if( mState == null ){
            mState = new State();
        } else {
            for(TabSpec tab : mState.tabs){
                //add them to the tab host
            }
        }
    }
    @Override
    public Object onRetainNonConfigurationInstance() {
        return mState;
    }
    
    private static class State{
        List<TabSpec> tabs;
        // more stuff that you want to save
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2013-07-02
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多