我有一个 ListView,我需要根据 ListView 的高度更改行的高度。那是因为,我想一次只显示固定数量的行,但是考虑到多屏问题,我需要以编程方式计算高度。
问题是,当getView()
我的自定义适配器的方法返回视图时,android 出现异常:
07-21 15:17:00.391: E/AndroidRuntime(620): 致命异常: 主要 07-21 15:17:00.391: E/AndroidRuntime(620): java.lang.UnsupportedOperationException: addView(View, LayoutParams) 不是在 AdapterView 中支持 07-21 15:17:00.391: E/AndroidRuntime(620): at android.widget.AdapterView.addView(AdapterView.java:471) 07-21 15:17:00.391: E/AndroidRuntime(620):在 android.view.LayoutInflater.inflate(LayoutInflater.java:497) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:396) 07-21 15 :17:00.391: E/AndroidRuntime(620): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 07-21 15:17:00.391: E/AndroidRuntime(620): at us.hucare.adapters。 ShelfAdapter.getView(ShelfAdapter.java:72) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.AbsListView.obtainView(AbsListView.java:2033) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.ListView.makeAndAddView(ListView.java:1772) 07-21 15:17:00.391: E/AndroidRuntime(620) : 在 android.widget.ListView.fillDown(ListView.java:672) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.ListView.fillFromTop(ListView.java:732) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.ListView.layoutChildren(ListView.java:1625) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.AbsListView .onLayout(AbsListView.java:1863) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E /AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.FrameLayout.onLayout(FrameLayout.java: 431) 07-21 15:17:00.391:E/AndroidRuntime(620): 在 android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java :4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620):在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15 :17:00.391: E/AndroidRuntime(620): 在 android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup。布局(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/安卓运行时(620):在 android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15 :17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout。 layoutVertical(LinearLayout.java:1486) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15:17:00.391: E/ AndroidRuntime(620): 在 android.view.View.layout(View.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224 ) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android .view.查看。布局(View.java:11278)07-21 15:17:00.391:E/AndroidRuntime(620):在 android.view.ViewGroup.layout(ViewGroup.java:4224)07-21 15:17:00.391:E/ AndroidRuntime(620): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.View.layout(View.java:11278 ) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android .widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 07-21 15:17 :00.391: E/AndroidRuntime(620): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.View.layout(查看.java:11278) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在android.widget.FrameLayout.onLayout(FrameLayout.java:431) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.View.layout(View.java:11278) 07-21 15: 17:00.391: E/AndroidRuntime(620): 在 android.view.ViewGroup.layout(ViewGroup.java:4224) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1489) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 07-21 15:17:00.391: E/AndroidRuntime (620): 在 android.os.Handler.dispatchMessage(Handler.java:99) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 android.os.Looper.loop(Looper.java:137) 07-21 15:17:00.391:E/AndroidRuntime(620): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 java.lang.reflect.Method.invokeNative(Native方法) 07-21 15:17:00.391: E/AndroidRuntime(620): at java.lang.reflect.Method.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620) : 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551)07-21 15:17:00.391:E/AndroidRuntime(620):在 dalvik.system.NativeStart.main(本机方法)Method.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 dalvik .system.NativeStart.main(本机方法)Method.invoke(Method.java:511) 07-21 15:17:00.391: E/AndroidRuntime(620): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 07-21 15:17:00.391: E/AndroidRuntime(620): 在 dalvik .system.NativeStart.main(本机方法)
这是第一部分getView()
if (convertView == null || mDataChanged) {
mDataChanged = false;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_shelf, parent);
LayoutParams params = convertView.getLayoutParams();
if (params == null) {
params = new LayoutParams(LayoutParams.MATCH_PARENT, mShelfHeight);
} else {
params.height = mShelfHeight;
}
convertView.setLayoutParams(params);
}
我认为问题应该出在那几行,因为如果我在下面执行此代码:
if (convertView == null || mDataChanged) {
mDataChanged = false;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_shelf, null);
}
它工作正常。(但它显示的行数比我想要的多)
我在这个问题上找到了很多答案,但似乎没有人适合我。请问有什么建议吗?