Intereting Posts
Шерлок Actionbar Пользовательский шрифт Попытка открыть конкретную папку в android, используя намерение Как сделать apk Secure. Защита от декомпиляции Эмулятор-5554 отключен! Отмена «com.example.merhaba.Main activity launch!»! Внутренности android и ограничения памяти / процессора? Android – копирование активов во внутреннее хранилище Пустой экран перед брызгом Как получить эскиз для видео в папке / sdcard / Android / data / mypackage / files? ShareActionProvider без какой-либо панели действий в android Переход к родительской активности в ActionBar без обработки. UnknownError: ApiException: Key hash **** не соответствует … когда у меня установлено приложение FB Не удалось определить номер строки в logcat Android Studio Мобильное приложение HTML5 работает, когда экран телефона выключен? Сбой после добавления меню параметров пункта в панель действий из фрагмента, за которым следует изменение ориентации Android – внутреннее хранилище и внешнее хранилище, когда приложение установлено на SD-карте

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. Если вы не устанавливаете этот фон, и вы хотите сохранить его состояние, поэтому установите его как нулевое.