簡體   English   中英

2次旋轉后的應用狀態

[英]state of app after 2 rotations

我已經閱讀過有關本主題的文檔,在前景活動將被銷毀之前保存狀態...

並且現在一切正常(在設備旋轉之后),但是當我在旋轉之后再次旋轉設備時,我將再次丟失數據:(

這是我的代碼

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final MainActivity activity = this;
    activity.setTitle("Cow Counter");

    TextView QntyResultField = findViewById(R.id.textView);
    QntyResultField.setText(Integer.toString(cowQnty));
}

// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("qnty", cowQnty);
}

// How we retrieve the data after app crash...
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    //cowQnty = savedInstanceState.getInt("qnty");

    TextView QntyResultField = findViewById(R.id.textView);
    QntyResultField.setText("Cows: "+Integer.toString(savedInstanceState.getInt("qnty")));
}

我認為解決方案可能是實施檢查實例狀態是否已在...之前恢復的...

我已經在這里嘗試過了:

if(savedInstanceState.getInt("qnty") != 0){
    TextView QntyResultField = findViewById(R.id.textView);
    QntyResultField.setText("Cows: "+Integer.toString(savedInstanceState.getInt("qnty")));
}

然后我的onCreate()方法的初始部分將在結果字段中寫入零

TextView QntyResultField = findViewById(R.id.textView);
QntyResultField.setText(Integer.toString(cowQnty));

誰能告訴我是否接近解決方案?

您使用一個名為cowQnty的變量來存儲該值,然后將其保存在onSaveInstanceState捆綁軟件中,作為outState.putInt("qnty", cowQnty); 然后在onRestoreInstanceState還原它時,只需將TextView的值設置為檢索到的值,而不更新cowQnty的值。

您如何期望再次保存一個空字段? 有兩種解決方案;

首先,如果cowQnty不是很大的數量,並且您不介意使用一點RAM, cowQnty static字段,它將持久保存數據而根本不需要將其保存在Bundle中。

其次,只需在恢復狀態時再次設置cowQnty的值即可(為什么將其注釋掉?),如下所示:

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    cowQnty = savedInstanceState.getInt("qnty");

    TextView QntyResultField = findViewById(R.id.textView);
    QntyResultField.setText("Cows: "+Integer.toString(savedInstanceState.getInt("qnty")));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM