0

我查看了其他帖子并尝试了建议的解决方案,但没有一个对我有用。我有一个简单的应用程序,它有一个按钮和 Textview,当用户按下按钮时,TextView 中的值将增加 1。(textview 只有数字)。

我的纵向和横向模式有不同的布局,并且可以通过在我的 XML 中使用此代码来冻结屏幕方向的值android:freezesText="true"。但是,我现在遇到的问题是,当用户按下按钮以将 TextView 的值增加 1 时,在屏幕方向上,textview 中的值从 0 开始。例如

例如,在纵向模式下,该值为 23,当用户将屏幕旋转为横向并按下按钮时,该值将返回 1。如何使该值从 23 开始。

以下是我的代码;

纵向布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/textview"/>

    <Button
        android:id="@+id/up"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/up" />

</LinearLayout>

土地空间布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/textview"/>

    <Button
        android:id="@+id/up"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/up" />

</LinearLayout>

Java 代码

int counter = 0;
TextView textview;

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



        textview = (TextView)findViewById(R.id.textview );


        final Button up = (Button)findViewById(R.id.up);
        up.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                counter++;
                textview.setText("" + counter);

            }
        });
    }
4

3 回答 3

3

您需要onSaveInstanceState(Bundle savedInstanceState)像这样覆盖并写入要更改的应用程序状态值到 Bundle 参数。即使设备方向更改,这也将保存您的数据。

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

      UI();

}

public void UI() {

    textview = (TextView)findViewById(R.id.textview );

    final Button up = (Button)findViewById(R.id.up);
    plus.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            count++;
            textview.setText("" + counter);

        }
    });
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.activity_main);

    UI();
}

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

    savedInstanceState.putString("key_name", textview.getText().toString());
    savedInstanceState.putInt("count", ""+count);

}

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

     textview.setText("" + savedInstanceState.getString("key_name"));
     count = savedInstanceState.getInt("count")

}
于 2014-12-11T10:02:55.053 回答
1

可能是您在从纵向到横向时以某种方式重新加载活动参数,这将在旋转时相应counter地重新设置值。0您可以尝试使其static可变以避免冲突。

private static int counter = 0;
于 2014-12-11T10:15:06.337 回答
1

在我看来,您正在增加一个错误的变量。

@Override
public void onClick(View v) {
    count++;
    textview.setText("" + counter);
}

此外,在 onCreate 方法中执行此操作:

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



    textview = (TextView)findViewById(R.id.textview );
    textview.setText("" + counter);  //Add this line to automatically set the value


    final Button up = (Button)findViewById(R.id.up);
    plus.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            count++;
            textview.setText("" + counter);

        }
    });
}
于 2014-12-11T10:00:12.877 回答