2016-01-14 6 views
0

В моем приложении у нас есть представление, которое отображается вместо ListView, чтобы показать, что вид списка пуст. Это надувается из следующего XML:Ошибка атрибута атрибута стиля xml x

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/view_empty_state_icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tint="?colorAccent" /> 

     <Space 
      android:layout_width="match_parent" 
      android:layout_height="16dp" /> 

     <TextView 
      android:id="@+id/view_empty_state_message" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:textAllCaps="true" 
      android:textColor="?colorAccent" 
    android:textSize="@dimen/text_xxlarge" /> 

     <Space 
      android:layout_width="match_parent" 
      android:layout_height="24dp" /> 

    </LinearLayout> 

В последнее время запуска приложения сбой на раздувании этой точки зрения, производя этот стек монстра:

android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class <unknown> 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:539) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                    at android.view.View.inflate(View.java:19790) 
                    at <application package name>.view.EmptyStateView.init(EmptyStateView.java:58) 
                    at <application package name>.view.EmptyStateView.<init>(EmptyStateView.java:33) 
                    at <application package name>.adapter.ObservationsAdapter.onCreateViewHolder(ObservationsAdapter.java:187) 
                    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223) 
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449) 
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359) 
                    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
                    at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1418) 
                    at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1482) 
                    at android.support.v7.widget.RecyclerView.scrollBy(RecyclerView.java:1399) 
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:242) 
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:193) 
                    at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                   Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class <unknown> 
                    at android.view.LayoutInflater.createView(LayoutInflater.java:645) 
                    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694) 
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762) 
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) 
                    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)  
                    at android.view.View.inflate(View.java:19790)  
                    at <application package name>.view.EmptyStateView.init(EmptyStateView.java:58)  
                    at <application package name>.view.EmptyStateView.<init>(EmptyStateView.java:33)  
                    at <application package name>.adapter.ObservationsAdapter.onCreateViewHolder(ObservationsAdapter.java:187)  
                    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)  
                    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)  
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)  
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)  
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)  
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)  
                    at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1418)  
                    at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1482)  
                    at android.support.v7.widget.RecyclerView.scrollBy(RecyclerView.java:1399)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:242)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:193)  
                    at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)  
                    at android.os.Handler.handleCallback(Handler.java:739)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5417)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
                   Caused by: java.lang.reflect.InvocationTargetException 
                    at java.lang.reflect.Constructor.newInstance(Native Method) 
                    at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
                    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)  
                    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)  
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)  
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)  
                    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)  
                    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)  
                    at android.view.View.inflate(View.java:19790)  
                    at <application package name>.view.EmptyStateView.init(EmptyStateView.java:58)  
                    at <application package name>.view.EmptyStateView.<init>(EmptyStateView.java:33)  
                    at <application package name>.adapter.ObservationsAdapter.onCreateViewHolder(ObservationsAdapter.java:187)  
                    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)  
                    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)  
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)  
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)  
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)  
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)  
                    at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1418)  
                    at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1482)  
                    at android.support.v7.widget.RecyclerView.scrollBy(RecyclerView.java:1399)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:242)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:193)  
                    at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)  
                    at android.os.Handler.handleCallback(Handler.java:739)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5417)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
                   Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f01011a a=-1} 
                    at android.content.res.TypedArray.getColorStateList(TypedArray.java:482) 
                    at android.widget.ImageView.<init>(ImageView.java:179) 
                    at android.widget.ImageView.<init>(ImageView.java:140) 
                    at android.widget.ImageView.<init>(ImageView.java:136) 
                    at java.lang.reflect.Constructor.newInstance(Native Method)  
                    at android.view.LayoutInflater.createView(LayoutInflater.java:619)  
                    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)  
                    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)  
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)  
                    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)  
                    at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)  
                    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)  
                    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)  
                    at android.view.View.inflate(View.java:19790)  
                    at <application package name>.view.EmptyStateView.init(EmptyStateView.java:58)  
                    at <application package name>.view.EmptyStateView.<init>(EmptyStateView.java:33)  
                    at <application package name>.adapter.ObservationsAdapter.onCreateViewHolder(ObservationsAdapter.java:187)  
                    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)  
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)  
                    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)  
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)  
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)  
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)  
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)  
                    at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1418)  
                    at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1482)  
                    at android.support.v7.widget.RecyclerView.scrollBy(RecyclerView.java:1399)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:242)  
                    at <application package name>.fragment.observations.AbstractListFragment$5.success(AbstractListFragment.java:193)  
                    at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)  
                    at android.os.Handler.handleCallback(Handler.java:739)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5417)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Было очевидно, что проблема была вызвана ссылкой стиля в атрибут «tint» («?») ImageView и TextView, поэтому мы изменили эту ссылку на статическую ссылку на файл colors.xml (теперь значения атрибута «@ color/accent»), но мне любопытно , что могло бы причина проблемы в первую очередь?

ответ

1

Вы использовали неправильные обозначения. Это НЕ

?colorAccent 

Вы должны использовать

?attr/colorAccent 

вместо этого.

+0

Странная вещь она работает нормально в течение примерно 6 месяцев, он только недавно провалился. Кроме того, это устаревший проект, и я даже не знаю, почему предыдущий программист написал его так: D: – KubaK

0

Либо вы можете использовать его непосредственно в качестве @color/colorPrimary от цвета, где вы определили цвет как -

<color name="colorPrimary">#3F51B5</color> 

значений. Или вам нужно добавить атрибуты, как

<attr name="colorPrimary" format="reference"/> 

, а затем инициализации в стиле как-

<style name="AppTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
<item name="attr/colorPrimary">@color/colorPrimary</item> 
</style> 

И вы будете иметь возможность использовать в качестве ?attr/colorPrimary

+0

Да, как я уже сказал, я изменил его на «@ color/accent», но я хотел знать, почему он работал до и остановился работающих в последнее время. Я использую менеджер сборки Gradle, поэтому, возможно, это может быть связано с некоторыми обновлениями в библиотеках Android? – KubaK