setText, сбрасывает и блокирует при входе в ландшафт - PullRequest
1 голос
/ 28 апреля 2011

Привет всем спасибо за просмотр этого. Я действительно не могу понять, почему это происходит, хотя это может быть связано с моим фоновым потоком, который обрабатывает аудиовход. Все работает нормально, пока я не наклоню телефон, пока не поместил портрет в альбомной ориентации или что-то в этом роде. Поэтому он должен автоматически растягивать макет моего портрета. Но он просто растягивает его, он также сбрасывает мой ярлык и лишает меня возможности использовать на них мои функции setText. Я также заметил, что это приостанавливает мой фоновый поток. Вот код для установки textViews:

private void reactOnAudioMessage(Message msg) {
    TextView txtVwLastValue = (TextView) findViewById(R.id.txtVwLastValue);
    String result=null;
    DataFile newData=null;
    Bundle bndl=msg.getData();
    // ** newData getting created, with the correcy value etc this is not the problem.
    if(newData!=null){
        txtVwLastValue.setText("Last Value Received:" +newData.getValue());
        mDataList.add(newData);
        drawGraph(mImageView);
    } 
}

Вот мой xml файл

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Record"
android:id="@+id/btnRecord">
</Button>
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Last Value Received:" android:id="@+id/txtVwLastValue"></TextView>
<TextView android:text="TextView" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/txtVwType"></TextView>
<ImageView android:src="@drawable/icon" android:layout_width="fill_parent" android:id="@+id/imgViewGraph" android:layout_height="300px"></ImageView>
</LinearLayout>

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Когда устройство поворачивается, оно эффективно разрушает и воссоздает вашу активность в новой ориентации. Если вы запускаете свою тему как часть своей деятельности, это объясняет некоторые аспекты поведения, которое вы видите. Если вы хотите, чтобы ваш поток выживал между двумя экземплярами активности, вам нужно будет реализовать его как сервис, а не как простой поток.

Способ доказать это состоит в том, чтобы установить точку останова или добавить некоторую регистрацию в методе onCreate, и вы увидите, что это происходит как при запуске приложения и первом отображении активности, так и при поворотах устройства.

2 голосов
/ 28 апреля 2011
So it should automatic just stretch my portrait layout.

Это не совсем так, как вы уже видели.Ожидаемое поведение для необработанного изменения ориентации - воссоздание Activity (что означает прохождение всего жизненного цикла Activity, onDestroy (), onCreate () и т. Д. - очевидно, причина, по которой ваш ярлык сбрасывается).Это может быть выполнено различными способами:

http://developer.android.com/guide/topics/resources/runtime-changes.html & http://developer.android.com/resources/articles/faster-screen-orientation-change.html

Я "обрабатываю" изменения ориентации двумя довольно простыми способами в моем приложении.Одно действие заблокировано для портрета (поскольку нет смысла просматривать его в альбомной ориентации), установив флаг screenOrientation в Манифесте:

<activity android:name=".SettingsActivity" android:screenOrientation="portrait">

2-е действие, которое я использую, нужно просматривать обоими способами, так какон содержит график, который выглядит лучше всего при просмотре в альбомной ориентации.По сути, это означает, что я проверяю, что моя активность корректно закрывается (включая все используемые мной потоки или обработчики) и переделывается для рисования графика, заполняющего экран в альбомной ориентации.

Вам нужно подумать о том, как выхочу справиться с изменением ориентации.Что имеет больше смысла в вашем приложении?Есть много хороших ресурсов, которые рассказывают об изменениях ориентации через Google.

Я полагаю, что проблема, с которой вы сталкиваетесь с фоновым потоком, связана с обработчиками, которые есть в Деятельности, которая уничтожена и переделана.*

0 голосов
/ 28 апреля 2011

Каждый раз, когда вы наклоняете свой телефон, т.е. каждый раз, когда вы переключаетесь между портретным и альбомным режимами, действие перезапускается, поэтому выполняется onCreate().

...