Переопределение атрибутов стиля ссылок

После прочтения ссылок на атрибуты темы Я пытаюсь ссылаться на значение атрибута в моей настраиваемой теме, которую я установил.

Я применяю определенный пользователем стиль к CheckedTextView

 <CheckedTextView android:id="@+id/contactInfo" style="@style/ListViewCheckedTextViewRowStyle" > </CheckedTextView> 

Пользовательский стиль определяется как:

 <style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle"> <item name="android:checkMark">?android:listChoiceIndicatorMultiple</item> </style> 

Моя тема, которую я создал, определяется как:

 <style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item> </style> 

Тем не менее, стиль checkMark, который отображается, является типом по умолчанию для объекта, а не моим пользователем.

Единственный способ, с помощью которого я могу сделать вывод, – это:

 <style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle"> <item name="android:checkMark">@drawable/btn_check_holo_light</item> </style> 

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

Я устанавливаю тему в onCreate() моей Activity следующим образом:

 public void onCreate(Bundle savedInstanceState) { this.setTheme(R.style.Theme_Yellowgreen); super.onCreate(savedInstanceState); // ... } 

Я также попытался установить тему в файле AndroidManifest.xml, например:

 <application android:theme="@style/Theme.Yellowgreen" > 

Но это не сработало. Что может пойти не так?

Обновить

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

В моем большом проекте у меня есть два Fragments внутри Activity . Оба Fragments имеют Listviews поддерживаемые Adapters . В Fragment A метод getView() Adapter выглядит следующим образом:

 public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.contact_entry, null); } //... return convertView; } 

В Fragment B метод getView() Adapter выглядит следующим образом:

 public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, parent, false); } //... return convertView; } 

Макеты определяются следующим образом:

list_item.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/list_item_header" /> <include layout="@layout/contact_entry" /> <View android:id="@+id/list_divider" android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:drawable/divider_horizontal_dark" /> </LinearLayout> 1 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <include layout="@layout/list_item_header" /> <include layout="@layout/contact_entry" /> <View android:id="@+id/list_divider" android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:drawable/divider_horizontal_dark" /> </LinearLayout> 

list_item_header.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/header_text" android:layout_width="match_parent" android:layout_height="25dip" android:background="@color/dark_blue" android:gravity="center_vertical" android:paddingLeft="6dip" android:textColor="@color/white" android:textSize="14sp" android:textStyle="bold" /> 

contact_entry.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/contactEntry" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:orientation="horizontal" > <QuickContactBadge android:id="@+id/contactPic" style="@style/ContactPicStyle" /> <CheckedTextView android:id="@+id/contactInfo" style="@style/ListViewCheckedTextViewRowStyle" > </CheckedTextView> </LinearLayout> 

По какой-то причине во Fragment B тематический атрибут checkMark не отображается корректно, тогда как во Fragment A checkMark использует текущую тему YellowGreen и правильно настроен. Почему это происходит?

Solutions Collecting From Web of "Переопределение атрибутов стиля ссылок"

Я думаю, вам нужна эта линия в вашей теме

 <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> 

Поэтому он будет выглядеть так:

 <style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item> <item name="android:checkedTextViewStyle">@style/ListViewCheckedTextViewRowStyle</item> </style> 

ОБНОВИТЬ

После того, как были обновлены вопросы и некоторые комментарии дополнительной информации, мы обнаружили, что проблема была в Context . Это та же ошибка, что и в моем вопросе: селектор цвета Android не работает с пользовательскими атрибутами

К одному фрагменту была передана Activity и другому Application . Я не эксперт, но даже оба этих класса расширяют Context Только Activity расширяет ContextThemeWrapper , который имеет информацию о стилях. Возможно, было бы полезно прочитать эту статью для будущего понимания. Контекст: http://www.doubleencore.com/2013/06/context/