java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutPara

今天在用listView时遇到这个问题。

网络一些解释
1.

java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

FrameLayout的父控件是一个LinearLayout控件,问题出在,LinearLayout为子控件分配空间的时候,获取FrameLayout的LayoutParams的必须为LinearLayout.LayoutParams,而非FrameLayout.LayoutParams。

          简单的举个栗子说明一下:最外层有ReLativeLayout A,里面有两个LinearLayout B、C,而B中又有一个一个FrameLayout D。如果要在代码里设置B的LayoutParams,B的LayoutParams要为RelativeLayout.LayoutParams。

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    B.setLayoutParams(params);

         而D要设置的话,需要:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0);
    params.weight = 8;
    D.setLayoutParams(params);

2

不同Layout,对应不同Layoutparameter,那么被嵌套的布局或者view,要尊用父布局的Layoutparameter类。  
因为你的这个LinearLayout是放在一个ListView中(ListView是AbsListView的子类),所以LinearLayout.setLayoutParameters()中应该放AbsListView.LayoutParameter这个类的对象。 
相关Bug: 
1)java.lang.ClassCastException: android.widget.LinearLayout LayoutParamscannotbecasttoandroid.widget.RelativeLayout LayoutParams 
:这段话提示我们不能将Linear LayoutParamsRelativeLayout LayoutParams 

2):java.lang.ClassCastException: android.widget.LinearLayout LayoutParamscannotbecasttoandroid.widget.AbsListView LayoutParams 
在DDMS里面也没有具体定位哪里错了,逐步调试在return那里出错了,求解? 
——解决方案——————– 
LinearLayout.LayoutParams _llp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT); 
这句代码导致的错误哦 
——解决方案——————– 
因为你的这个LinearLayout是放在一个ListView中(ListView是AbsListView的子类),所以LinearLayout.setLayoutParameters()中应该放AbsListView.LayoutParameter这个类的对象。

3
当发生这种状况。。。。,eclipse得到的异常就在你listView.setAdapter(adapter);这句话中。。。你怎么看listView和adapter都没有空值,正纳闷时
你应该要考虑一下被你添加的FooterView或者HeaderView是否为null,因为空的话。。。ListView就无法测量高度。。。然后无法布局。。最后就报错了。。。还有addFooterView和addHeaderView这两个方法一定要放在
listView.setAdapter(adapter);前面,要不然死活都不会出现你想要的FooterView或者HeaderView;


看来看去只有第三种情况和我的比较符合。于是看了下设置footView的地方。发现原来footView我是在fragment的
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState)方法中写的,用的是方法自带的inflate调用的是 inflate(int resource, ViewGroup root, boolean attachToRoot) 用的是onViewCreate自带的viewGroup做第二个参数。最后导致得到的footView是null.
正确方法调用 inflate ( int resource , ViewGroup root)方法第二个参数设置成null .或者调用上面的三个参数的方法,第二个参数也设置成null,第三个参数设置成false,也许也可以。


你可能感兴趣的:(java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutPara)