如何通过freezestext访问从以前的活动传递的文本?

时间:2017-12-02 15:20:21

标签: android textview

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

由于

2 个答案:

答案 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:你需要让计数器变量全局化。