方向改变时保持价值

时间:2019-03-02 12:57:49

标签: java android

我正在开发一个非常基本的Android应用程序,每当我按下 Button 时,就会在 TextView 中添加一个数字。使用 onSaveInstanceState() onRestoreInstanceState()更改移动设备的方向时, TextView 中显示的数字也会保留。 em>函数。

问题 方向更改时的值,该值保留,但是在按下按钮时更改方向后,它将再次从0开始计数,而不是从保留的值开始计数。

我的代码:

public class MainActivity extends AppCompatActivity {

    TextView showValue;
    int counter=0;

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

        showValue = (TextView) findViewById(R.id.CounterValue);
    }


    public void countIN(View view)
    {
        counter++;
        showValue.setText(Integer.toString(counter));
    }


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putString("my_text", showValue.getText().toString());
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        showValue.setText(savedInstanceState.getString("my_text"));
    }
 }

谢谢您的回复。

3 个答案:

答案 0 :(得分:1)

您可以使用多种方法保存和获取数据

首先:如果数据很小,则可以使用onSavedInstanceStateonRestoreInstanceState ..有关详细信息,请遵循this answerthis one

第二,如果您要存储的数据太多,请改用ViewModel。 this是您可以开始的教程。

答案 1 :(得分:0)

添加

counter=Integer.parseInt(savedInstanceState.getString("my_text"));

onrestoreInstanceState方法内部

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    showValue.setText(savedInstanceState.getString("my_text"));
    counter=Integer.parseInt(savedInstanceState.getString("my_text"));
}

答案 2 :(得分:0)

  

问题是当方向改变时,值保留,但   更改后再次按下按钮时   再次定位,从0开始计数,然后再开始   从保存的值中获取

这是因为在更改配置后恢复counter的值时,您将其设置为TextView上的文本,但未将其设置为计数器变量。因此,当单击按钮时,它将采用counter 的先前值,即每次配置更改后的zero ,它将对其进行递增并将其设置为文本TextView

解决方案

onRestoreInstanceState方法内,添加以下语句

counter = Integer.parseInt(savedInstanceState.getString("my_text"));