Изменение ориентации Android вызывает исчезновение вещей - PullRequest
0 голосов
/ 12 ноября 2011

Ниже приведен мой макет для шаблона строки в SimpleCursorAdapter.

ImageView с идентификатором next_arrow навсегда исчезает при изменении ориентации (возврат к исходной ориентации не делает его повторнопоявляются).Если я заменю @ drawable / arrow на @ drawable / icon (копия стандарта sym_def_app_icon ), это будет работать нормально.Все рассматриваемые элементы рисования простые ссылки на файлы PNG .

Я думал, что это может быть как-то связано с иконками разных размеров, но я изменил размер @ drawable / icon, чтобы он был точнымте же размеры, что и стрелка, и она все еще работала нормально, в то время как стрелка не работала.

Обновление

Хорошо, это становится еще более странным.Я переименовал arrow.png в нечто_not_called_arrow.png и ... это работает.Что происходит?

Я не первый раз вижу, как это происходит.Ранее сегодня у меня был еще один нарисованный PNG, который хорошо отображался в представлении Eclipse Graphical Layout, но вообще не отображался в эмуляторе или на устройстве, пока я не переименовал файл.Я попытался очистить и обновить проект, а также перезапустить Eclipse.

Другое обновление

Только что это повторилось в другой ситуации.В Activity onCreate () я вызываю findViewById () для нескольких ресурсов, чтобы настроить их, все отлично работает при первой загрузке.Когда onCreate () вызывается из-за изменения ориентации, findViewById () возвращает null для всех этих ресурсов.Это сводит с ума, и ответы, которые включают android:configChanges="keyboardHidden|orientation", вовсе не являются реальными решениями, они просто маскируют проблему.

В этом случае я «исправил» это, переименовав макет xml для действия из share.xml до share_activity_layout.xml .Я начинаю думать, что есть какая-то ошибка в генерации файлов R и управлении идентификаторами ресурсов в целом.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="90dp"
              android:background="@drawable/product_list_divider"
              android:paddingTop="10dp">

    <ImageView android:src="@drawable/ninja_20_65"
               android:id="@+id/category_icon" 
               android:layout_marginLeft="20dp"
               android:layout_marginRight="20dp"
               android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="3dp"/>

    <LinearLayout android:orientation="vertical"
                  android:layout_weight="5"
                  android:layout_width="0dp"
                  android:layout_height="wrap_content">

        <TextView android:id="@+id/category_name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:text="Name" 
            style="@style/CategoryHeading" android:layout_marginTop="5dp"/>
        <TextView android:id="@+id/category_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="Description"
            style="@style/CategoryDescription"/>
    </LinearLayout>

    <ImageView android:src="@drawable/arrow"
               android:layout_weight="1"
               android:layout_width="0dp"
               android:layout_marginRight="10dp"
               android:layout_height="wrap_content" android:layout_marginTop="20dp" android:id="@+id/next_arrow"/>

</LinearLayout>

Я использую Android 2.1.

Ответы [ 3 ]

2 голосов
/ 26 декабря 2011

Я переименовал arrow.png в something_not_called_arrow.png, и это работает.

Была последующая аналогичная проблема, которую я «исправил», переименовав макет xml для активности из share.xml в share_activity_layout.xml.

Я думаю, что есть ошибка в генерации файла R и управлении идентификатором ресурса в целом.

0 голосов
/ 26 декабря 2011

В вашей папке ресурсов есть много подкаталогов.

  • drawable <- универсальный </li>
  • drawable-land <- только портрет </li>
  • drawable-hdpi <--- только высокое разрешение </li>
  • drawable-mdpi <--- только среднее разрешение </li>

и т. д.

, если вы используете R.drawable.arrow, Android будет смотреть на drawable, чтобы загрузить его.Проблема в том, что (и на самом деле это особенность), что если вы находитесь в ландшафтном режиме, он сначала будет выглядеть на рисованной земле, а если ничего не сможет найти, то только на рисованной.То же самое относится к разным разрешениям и т. Д.

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

То же самое относится к макетам.

0 голосов
/ 12 ноября 2011

Две мысли.

есть ли в вашей папке ресурсов еще один объект, называемый стрелкой?когда происходит изменение ориентации, Android воссоздает действие и перезагружает макет и изображения.это может быть получение другого изображения откуда-то.они могут объяснить, почему это работает, когда вы переименовываете drawable.

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

...