将小部件保存在Bundle outState中

时间:2019-05-08 10:33:59

标签: java android

我正在Android Studio中制作一个基本游戏,如果播放器旋转屏幕,我希望保存所有数据。因此,我使用受保护的void onSaveInstanceState(Bundle outstate)并使用受保护的void onRestoreInstanceStave(Bundle savedInstanceState)还原它们,并且我有一些按钮已通过编程方式进行了操作。那么我应该如何将Button放入outState?

import ...
public class MainActivity extends AppCompatActivity {
    Button btn1, btn2;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = findViewById(R.id.btn_yes);
        btn2 = findViewById (R.id.btn_no);
    }
    protected void onSaveInstanceState(Bundle outState) {
        //How to put buttons in outState?
    }
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        //How to get buttons in savedInstanceState?
    }

1 个答案:

答案 0 :(得分:1)

您不能将整个小部件放在一个包中-即使在您的onCreate()方法中,btn1和btn2只是对XML中按钮ID的引用。您可能可以将这些id(它们将是int,因此是可保存的)保存在savedInstanceState中,但这将毫无用处。

当一个活动被销毁并重新创建时,整个屏幕将重新绘制。如果您对按钮进行了任何更改(文本,颜色,数字计数等),则重新创建这些更改的方法是将所有存储在捆绑包中,然后在其中更新按钮onCreate()