文本视图值不为';屏幕旋转时无法恢复-Android
我看过其他帖子,尝试过建议的解决方案,但没有一个对我有效。我有一个简单的应用程序,它有一个按钮和Textview,当用户按下按钮时,Textview中的值将增加1。(文本视图只有数字) 我的纵向和横向模式有不同的布局,通过在我的XML文本视图值不为';屏幕旋转时无法恢复-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,当用户将屏幕旋转到横向并按下按钮
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。有关在屏幕旋转期间保存活动状态的详细信息。请参阅此。当我遇到这样的问题时,我从中得到了解决方案。谢谢,制造静电计数器完成了工作!!谢谢,制作静电计数器完成了工作!!