如何访问 freezestext 从之前的 activity 传递过来的文本?

How can I access text that is passed from previous activity by freezestext?

我有一个 activity,里面有一个 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() 的结果,但得到一个空字符串。

谢谢

好的,你必须等到布局完成渲染,所以如果你想在屏幕旋转后获得你的 EditText 的值(并重新创建 activity)你可以使用这个代码:

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

}

如果您不想这样做并且不需要每次旋转 phone 时都重新创建 Activity,您可以将其添加到 Activity清单:

android:configChanges="orientation|keyboardHidden|screenSize"

屏幕旋转时的ActivityLifeCycle如下

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: 您需要将计数器变量设为全局。