文本视图值不为';屏幕旋转时无法恢复-Android

文本视图值不为';屏幕旋转时无法恢复-Android,android,android-layout,textview,android-orientation,onconfigurationchanged,Android,Android Layout,Textview,Android Orientation,Onconfigurationchanged,我看过其他帖子,尝试过建议的解决方案,但没有一个对我有效。我有一个简单的应用程序,它有一个按钮和Textview,当用户按下按钮时,Textview中的值将增加1。(文本视图只有数字) 我的纵向和横向模式有不同的布局,通过在我的XMLandroid:freezesText=“true”中使用此代码,我能够冻结屏幕方向上的值。但是,我现在遇到的问题是,当用户按下按钮将TextView的值增加1时,TextView中的值从0开始。比如说 例如,在纵向模式下,值为23,当用户将屏幕旋转到横向并按下按钮

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

我的纵向和横向模式有不同的布局,通过在我的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>

在我看来,你增加了一个错误的变量

@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);

        }
    });
}

在我看来,你增加了一个错误的变量

@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);

        }
    });
}

您需要重写saveInstanceState(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")

}

您需要重写saveInstanceState(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")

}

当从纵向转到横向时,您可能会以某种方式重新加载活动参数,从而在旋转时将
计数器
值重置为
0
。您可以尝试将其设置为
静态
变量,以避免冲突

private static int counter = 0;

当从纵向转到横向时,您可能会以某种方式重新加载活动参数,从而在旋转时将
计数器
值重置为
0
。您可以尝试将其设置为
静态
变量,以避免冲突

private static int counter = 0;

很抱歉,我必须在这里重写代码,所以我忘了计算er,很抱歉。很抱歉,我必须在这里重写代码,所以我忘了计算er,很抱歉。试试这个。。(恢复计数状态)我已经在提供的帖子上尝试了解决方案,但没有成功。试试这个。。(恢复计数的状态)我已经在提供的帖子上尝试了解决方案,但没有成功。我尝试了此代码,但当屏幕旋转并按下按钮时,textview的值从0开始。现在应用程序强制关闭。@Android OK被错误地说了。现在将计数值也保存在
savedInstanceState
中。请看我编辑的答案。Yugesh,由于你的努力,我给了你的答案+1,但结果是,正如穆罕默德·雷法特(Muhammed Refat)所指出的,我必须将计数器变量更改为静态。@Android Fine。有关在屏幕旋转期间保存活动状态的详细信息,请参阅此。当我遇到这样的问题时,我从那里得到了解决方案。我尝试了此代码,但当屏幕旋转并按下按钮时,textview的值从0开始。现在应用程序强制关闭。@Android ok我说错了。现在将计数值也保存在
savedInstanceState
中。查看我编辑的答案。Yugesh,由于您的努力,我给您的答案加了+1,但正如Muhammed Refaat所指出的,我不得不将计数器变量更改为静态。@Android Fine。有关在屏幕旋转期间保存活动状态的详细信息。请参阅此。当我遇到这样的问题时,我从中得到了解决方案。谢谢,制造静电计数器完成了工作!!谢谢,制作静电计数器完成了工作!!