为什么我在试图改变ListView单元格高度时在模拟器上得到这个错误?< / h1 >



下面的代码适用于我的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;
}

相关内容

最新更新