【问题标题】:restore Button text and visibility when activity is reCreated重新创建活动时恢复按钮文本和可见性
【发布时间】:2015-10-13 00:28:46
【问题描述】:

我的应用程序使用一个活动和许多片段,扩展 AppCompatActivity 的活动膨胀了一个 xml 文件,其中包含一个 LinearLayout 其他 ViewGroups,此 LinearLayout 的目的是保持 3 个按钮,并非所有按钮在开始时都是可见的。

在代码中,我更改了 LinearLayout 的视图并 它的一些按钮的视图和文本取决于在当前片段中采取的操作。然而,当 活动在电话主页键按下后重新创建。 每次在 SharedPreferences 中更改按钮时保存每个按钮的可见性和文本太难了,所以我尝试了下面的代码但失败了。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (mMainButtons_LL != null) {
            mMainButtons_LL = (LinearLayout) savedInstanceState.getSerializable("mainButtons");
        } else {
            mMainButtons_LL = (LinearLayout) findViewById(R.id.main_buttons_LL);
        }
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("mainButtons", (Serializable) mMainButtons_LL);

}

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    把你的代码改成这样:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.id.your_layout); // << replace your layout id here
        mMainButtons_LL = (LinearLayout) findViewById(R.id.main_buttons_LL);
    
        if (savedInstanceState != null) {
            mMainButtons_LL.setVisibility(savedInstanceState.getInt("visibility"));
            mMainButtons_LL.setText(savedInstanceState.getString("text");
        }
    }
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("visibility", mMainButtons_LL.getVisibility());
        outState.putString("text", mMainButtons_LL.getText.toString());
    }
    

    【讨论】:

    • IDE 抱怨 savedInstanceState.getInt("visibility") 必须是 view.Visible、view.Invisible、view.Gone 之一
    • 嗯,我不确定投诉,但是当putIntgetInt 放置/获取View.VISIBLE 等时,您始终可以使用开关/大小写。但是您知道我的代码和您的代码之间的区别。
    • 你的意思是:int vis = savedInstanceState.getInt("mainBtVis"); mMainButtons_LL.setVisibility(vis == 0 ? View.VISIBLE : vis == 4 ? View.INVISIBLE : View.GONE);并为 LinearLayout 中的所有子视图执行此操作?
    猜你喜欢
    • 2023-03-16
    • 2011-10-21
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    相关资源
    最近更新 更多