我有一个带有TextView的活动,里面有一些文字。我使用android:freezesText="true"
所以当旋转屏幕时,TextView中的文本将保留。
但是,当我尝试使用textView.getText()
访问该文本时,我什么都没有得到,但文字仍在屏幕上。
我可以访问此文本吗?如果没有在TextEdit中它真正放在哪里?
activity.xml:
<TextView
android:id="@+id/counterTV"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:freezesText="true"
tools:text="4"
style="@style/CounterTVStyle"/>
Activity.java:
private int counterStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
counterTV = findViewById(R.id.counterTV);
Integer currCounter;
try {
currCounter = Integer.parseInt(counterTV.getText().toString());
} catch (NumberFormatException e) {
currCounter = null;
}
counterStart = currCounter != null ? currCounter : 1;
}
我尝试打印counterTV.getText()
的结果,并得到一个空字符串。
由于
答案 0 :(得分:0)
好的,你必须等到布局完成渲染,所以如果你想在屏幕旋转后获得EditText
的值(并重新创建活动),你可以使用这段代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
counterTV = findViewById(R.id.counterTV);
counterTV.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
counterTV.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Log.d("your_tag","Your value here : " + counterTV.getText().toString());
Integer currCounter;
try {
currCounter = Integer.parseInt(counterTV.getText().toString());
} catch (NumberFormatException e) {
currCounter = null;
}
counterStart = currCounter != null ? currCounter : 1;
}
});
}
如果您不想这样做,并且每次旋转手机时都不需要重新创建Activity
,则可以在活动清单中添加:
android:configChanges="orientation|keyboardHidden|screenSize"
答案 1 :(得分:0)
旋转屏幕时的Activity LifeCycle如下
onPause
onSaveInstanceState
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
//CODE BELOW
@Override
protected void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(b);
bundle.putInt("counter",currCounter);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(savedInstanceState!=null) {
counter = savedInstanceState.getInt("counter");
}
}
P.S:你需要让计数器变量全局化。