Android:扩展BaseAdapter的自定义ListAdapter在应用程序启动时崩溃

19

从本地数据库获取数据,然后使用游标进行映射。自定义适配器显示类似于ListView的数据。当从数据库中添加/删除项目时,适配器应该刷新。下面尝试的解决方案在启动时崩溃了。有什么建议吗?

提前感谢, -D

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   ViewGroup p = parent;            
   if (v == null) {
     LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     v = vi.inflate(R.layout.items_row, p);
   }
   int size = mAdapter.getCount();
   Log.d(TAG, "position " + position + " Size " + size);
   if(size != 0){
     if(position < size) return mAdapter.getView(position, v, p);
     Log.d(TAG, "-position " + position + " Size " + size);
   }
   return null;
 }

异常:

03-23 00:14:10.392: ERROR/AndroidRuntime(718): java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
03-23 00:14:10.392: ERROR/AndroidRuntime(718):     at android.widget.AdapterView.addView(AdapterView.java:461)
03-23 00:14:10.392: ERROR/AndroidRuntime(718):     at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
03-23 00:14:10.392: ERROR/AndroidRuntime(718):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
03-23 00:14:10.392: ERROR/AndroidRuntime(718):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
03-23 00:14:10.392: ERROR/AndroidRuntime(718):     at com.xyz.abc.CustomSeparatedListAdapter.getView(CustomSeparatedListAdapter.java:90)
...
2个回答

87
v = vi.inflate(R.layout.items_row, p);

在该调用中添加一个false的第三个参数,我认为您的问题就会解决。该调用应该变成:

v = vi.inflate(R.layout.items_row, p, false);

1
这就是答案!我之前也遇到过这个问题,但这次由于已经有一段时间了,我忘记加上额外的false参数,确实这样做解决了问题。 - NightWatchman

7

修改这段代码

v = vi.inflate(R.layout.items_row, p);

为了

v = vi.inflate(R.layout.items_row, null );

警告!答案错误。请参见http://www.doubleencore.com/2013/05/layout-inflation-as-intended/。 - seanpj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接