下面的代码适用于我的API 21设备。
但是它不能在Android Studio的Nexus 7 API 19模拟器上工作:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = LayoutInflater.from(getContext());
View customView = inflater.inflate(R.layout.shopping_list_cell, parent, false);
customView.setLayoutParams(new RelativeLayout.LayoutParams(cellWidth, cellHeight + 20));
customView.requestLayout();
return customView;
}
导致此问题的确切行如下(当我取出这2行时,我在模拟器上没有得到任何错误):
customView.setLayoutParams(new RelativeLayout.LayoutParams(cellWidth, cellHeight + 20));
customView.requestLayout();
下面是我的错误信息:
FATAL EXCEPTION: main过程:john.smith.johnsmith。testapplication, PID: 1649java.lang.ClassCastException: android.widget。RelativeLayout$LayoutParams不能转换为android.widget.AbsListView$LayoutParamsandroid.widget.ListView.setupChild (ListView.java: 1826)android.widget.ListView.makeAndAddView (ListView.java: 1793)android.widget.ListView.fillDown (ListView.java: 691)android.widget.ListView.fillFromTop (ListView.java: 752)android.widget.ListView.layoutChildren (ListView.java: 1630)android.widget.AbsListView.onLayout (AbsListView.java: 2091)android.view.View.layout (View.java: 14817)android.view.ViewGroup.layout (ViewGroup.java: 4631)android.widget.RelativeLayout.onLayout (RelativeLayout.java: 1055)android.view.View.layout (View.java: 14817)android.view.ViewGroup.layout (ViewGroup.java: 4631)android.widget.FrameLayout.layoutChildren (FrameLayout.java: 453)android.widget.FrameLayout.onLayout (FrameLayout.java: 388)android.view.View.layout (View.java: 14817)android.view.ViewGroup.layout (ViewGroup.java: 4631)android.widget.LinearLayout.setChildFrame (LinearLayout.java: 1671)android.widget.LinearLayout.layoutVertical (LinearLayout.java: 1525)android.widget.LinearLayout.onLayout (LinearLayout.java: 1434)android.view.View.layout (View.java: 14817)android.view.ViewGroup.layout (ViewGroup.java: 4631)android.widget.FrameLayout.layoutChildren (FrameLayout.java: 453)android.widget.FrameLayout.onLayout (FrameLayout.java: 388)android.view.View.layout (View.java: 14817)android.view.ViewGroup.layout (ViewGroup.java: 4631)android.view.ViewRootImpl.performLayout (ViewRootImpl.java: 1987)android.view.ViewRootImpl.performTraversals (ViewRootImpl.java: 1744)android.view.ViewRootImpl.doTraversal (ViewRootImpl.java: 1000)android.view.ViewRootImpl TraversalRunnable.run美元(ViewRootImpl.java: 5670)android.view.Choreographer CallbackRecord.run美元(Choreographer.java: 761)android.view.Choreographer.doCallbacks (Choreographer.java: 574)android.view.Choreographer.doFrame (Choreographer.java: 544)android.view.Choreographer FrameDisplayEventReceiver.run美元(Choreographer.java: 747)android.os.Handler.handleCallback (Handler.java: 733)android.os.Handler.dispatchMessage (Handler.java: 95)android.os.Looper.loop (Looper.java: 136)android.app.ActivityThread.main (ActivityThread.java: 5017)在java.lang.reflect.Method。invokeNative(本地方法)java.lang.reflect.Method.invoke (Method.java: 515)com.android.internal.os.ZygoteInit MethodAndArgsCaller.run美元(ZygoteInit.java: 779)com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 595)在dalvik.system.NativeStart。主要(本地方法)
尝试将Relative.LayoutParams
改为AbsListView.LayoutParams
:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = LayoutInflater.from(getContext());
View customView = inflater.inflate(R.layout.shopping_list_cell, parent, false);
customView.setLayoutParams(new AbsListView.LayoutParams(cellWidth, cellHeight + 20));
//remove customView.requestLayout();
return customView;
}