Intereting Posts
Тестирование библиотеки Android с помощью Robolectric Android: как избавиться от «затухающего края» scrollView, Зачем использовать Handler? Android Alarm Manager с широковещательным приемником, зарегистрированным в коде, а не манифестацией AdMob: «активность просочилась ServiceConnection» и «AdvertisingIdClient unbindService не удалось». Как изменить ключевой фон любого ключа в мягкой клавиатуре Android Android 2.2.1 журнал изменений Какая конфигурация ProGuard мне нужна для Firebase на Android? Фильтр Калмана для GPS-андроида «Adb devices» показывает фиктивное устройство Похожие темы Softkeyboard в ландшафтном режиме не появляется в эмуляторе Android Как изменить анимацию по умолчанию при изменении активности? Откройте URL-адрес в браузере Android, избегайте нескольких вкладок Как получить правильную ширину окна при изменении ориентации для устройств Android как на планшетах, так и на мобильных телефонах

LayoutInflater иногда (случайно) раздувается с неправильным цветом фона

Я раздуваю представление с помощью LayoutInflater. Цвет фона моего раздутого RelativeLayout установлен в моем XML-файле. У меня возникла странная проблема на одном из моих устройств: иногда (случайно) цвет фона был другим (неправильным) цветом из моего цвета.xml. Кто-нибудь встречался с этой проблемой раньше?

Детали:

У меня есть ListView с CursorAdapter . Я раздуваю элементы списка только одним статическим элементом (поэтому я думаю, что это не проблема рециркуляции), используя этот код:

 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ; View v = vi.inflate(R.layout.bookmark_item, null) ; //bindView(v, context, cursor) ; Log.wtf("newView", "View color: " + Integer.toString(((ColorDrawable) (((RelativeLayout)v.findViewById(R.id.bookmark_row)).getBackground())).getColor())) ; return v; } 

Мой layout/bookmark_item.xml :

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/bookmark_row" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/app_menu_item_background" tools:ignore="UselessParent" > <TextView android:id="@+id/bookmark_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> </RelativeLayout> 

Внутренний цвет фона RelativeLayout установлен на @color/app_menu_item_background . Этот цвет в моем R.java :

 public static final int app_menu_item_background=0x7f0a0036; 

У меня также есть цвет с именем @color/app_menu_item_colored_background , который я использую в другом месте в моем коде, у него нет ничего общего с моим списком закладок и адаптером. Он также имеет другой идентификатор ресурса в R.java :

 public static final int app_menu_item_colored_background=0x7f0a0038; 

И оба они разные цвета:

 <color name="app_menu_item_background">#517409</color> <color name="app_menu_item_colored_background">#f6efde</color> 

Затем при запуске моего приложения иногда (не всегда) мой вид использует неправильный app_menu_item_colored_background фона app_menu_item_colored_background . Я записал завышенные цвета представления (см. Код выше), и он даже иногда отличается:

 "newView" - "View color: -11439095" "newView" - "View color: -593954" 

Обратите внимание, что первый цвет – это #517409 , второй – #f6efde .

Как ни странно, я мог воспроизвести ошибку только на одном устройстве, Samsung Galaxy S3 mini, примерно в 2-3 раза с каждых 10 попыток.

Solutions Collecting From Web of "LayoutInflater иногда (случайно) раздувается с неправильным цветом фона"

Попробуйте вручную

 v.setBackgroundColor(getResources().getColor(R.color.app_menu_item_colored_background)); 

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

Однако я не знаю причины этого поведения.

Я слышал это раньше. В вашем адаптере, где вы устанавливаете заднюю панель, если вы не устанавливаете фон, это произойдет. Поэтому вы должны установить фон в каждом вызове getView. Если вы не устанавливаете этот фон, и вы хотите сохранить его состояние, поэтому установите его как нулевое.