我试图在屏幕旋转时保留TextView的文本。以下是我的代码片段。
SampleActivity.java
public class SampleActivity extends AppCompatActivity {
private static TextView mIntView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_layout.xml);
mIntView = (TextView) findViewById(R.id.int_view);
if (savedInstanceState == null) {
mIntView.setText(String.valueOf(1));
}
Log.d("Test", mIntView.getText().toString());
}
}
sample_layout.xml
<TextView
android:id="@+id/int_view"
android:background="@drawable/circle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginRight="20dp"
android:gravity="center_vertical|center_horizontal"
android:textSize="25sp"
android:clickable="true"
android:textColor="@color/blue"
android:freezesText="true"/>
android:freezesText =“true”属性应该保留TextView的状态。但是当我旋转屏幕时,整数“1”从TextView中消失了。我在这里做错了吗?
答案 0 :(得分:1)
您可以覆盖onSaveInstanceState方法并放置要保存的所有值。让他们回到onRestoreIntanceState方法。
保存价值:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString(KEY, VALUE);
}
恢复价值:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState != null){
String mString = savedInstanceState.getString(KEY);
yourTextview.setText(mString);
}
}
答案 1 :(得分:0)
我在回答这个问题上有些延迟,但是我希望这会有所帮助。
将textview属性设置为savedInstanceState
时不需要android:freezesText="true"
。就这么简单。
只需创建sample_layout.xml
文件的横向变体。确保在android:freezesText
的纵向和横向变化中,true
都设置为sample_layout.xml
。
答案 2 :(得分:-1)
每当旋转设备时,活动都会被销毁并刷新。所以Text再次刷新。
要防止这种情况发生,请在AndroidManifest.xml
android:configChanges="orientation"
如果您的应用针对的是API级别13或更高级别,则应设置此配置:
android:configChanges="orientation|screenSize"