我查看了其他帖子并尝试了建议的解决方案,但没有一个对我有用。我有一个简单的应用程序,它有一个按钮和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>
Landspace布局
<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);
}
});
}
答案 0 :(得分: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")
}
答案 1 :(得分: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);
}
});
}
答案 2 :(得分:1)
可能以某种方式重新加载从纵向到横向的活动参数,因此在旋转时会再次将counter
值重置为0
。您可以尝试将其设为static
变量以避免冲突。
private static int counter = 0;