2014-01-10 3 views
9

Я получаю эту expcetion:

java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
at android.widget.ListView.setupChild(ListView.java:1806) 
at android.widget.ListView.makeAndAddView(ListView.java:1775) 
at android.widget.ListView.fillDown(ListView.java:672) 
at android.widget.ListView.fillFromTop(ListView.java:732) 
at android.widget.ListView.layoutChildren(ListView.java:1625) 
at android.widget.AbsListView.onLayout(AbsListView.java:1863) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1617) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1401) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
at android.view.View.layout(View.java:11278) 
at android.view.ViewGroup.layout(ViewGroup.java:4224) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1504) 
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2458) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4424) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 

, но проблема в том, что я не могу найти корень проблемы. Где именно и что это значит?

И почему виджет, у меня нет виджета!

КОД:

Не уверен, что если здесь:

public class MyListPreference extends ListPreference { 

    public MyListPreference(Context context) { 
     super(context); 
    } 

    public MyListPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected View onCreateDialogView() { 
     TextView dialogTitle = (TextView)super.onCreateDialogView(); 

     if (dialogTitle != null) { 
      // Dialog 
      dialogTitle.setBackgroundColor(getContext().getResources().getColor(R.color.category_background)); 
      dialogTitle.setPadding(10, 4, 4, 4); 

      // Text 
      dialogTitle.setTextSize(14); 
      dialogTitle.setTypeface(null, Typeface.BOLD); 
      dialogTitle.setTextColor(getContext().getResources().getColor(R.color.actionbar_background)); 

      dialogTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     } 
     return dialogTitle; 
    } 
} 
+0

показать код и это поможет нам найти проблему, где она. –

+0

Вы используете адаптер, в котором вы устанавливаете LayoutParams представления, возвращаемого функцией getView, в ViewGroup.LayoutParams вместо AbsListView.LayoutParams. Но опять же это только догадка. –

+0

Я добавляю код, где может быть ошибка, но я не уверен, что это правильно – senzacionale

ответ

41
dialogTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

Здесь вы заменяете существующий макет Params правильного типа AbsListView.LayoutParams с более общей ViewGroup.LayoutParams. Тип параметров макета - это тип родительского контейнера представления.

Если вам необходимо изменить существующие параметры макета, обратитесь к ним с помощью getLayoutParams(), измените его и позвоните requestLayout(), чтобы сообщить, что макет изменился.

Пример. Вместо

fooView.setLayoutParams(new LayoutParams(123, 456)); 

сделать

LayoutParams lp = fooView.getLayoutParams(); 
lp.width = 123; 
lp.height = 456; 
fooView.requestLayout(); 
+0

благодарю вас за ваш ответ, но я не отказываюсь полностью от того, что вы имеете в виду? Можете ли вы привести мне пример? Спасибо – senzacionale

+4

getLayoutParams() не будет работать, если вы пытаетесь установить размер перед добавлением вида в макет, например, если вы расширяете представление. Затем вам нужно выяснить, что основная реализация - это android.widget.AbsListView.LayoutParams и создать экземпляр: setLayoutParams (новый android.widget.AbsListView.LayoutParams (w, h)). Это полностью разрушает инкапсуляцию (выставляя внутреннюю реализацию LayoutParams) и является ошибкой API. – prewett

+0

вы можете помочь http://stackoverflow.com/questions/30951608/java-lang-classcastexception-android-view-viewgrouplayoutparams-cannot-be-cast – Aditya

Смежные вопросы