出现的bug 为 Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
粗心大意,绝对是粗心的问题,getView方法返回为null
由于scrollview嵌套listview会出现问题,所以在使用listview时就使用的是自定义的listview,即重写listview的onMearsure()方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
网上搜的答案一律都是adapter中的gerView方法返回为null,有些人返回null是因为在return convertview的时候粗心写成了return null;但是我的确是写的return convertview。改成原生的listview就不会出现这个问题,可是和scrollview嵌套就会有问题。因此我决定采用第二种方法,就是在加载数据的时候动态计算listview的高度。
/**
* 动态设置ListView的高度
* @param listView
*/
public void setListViewHeightBasedOnChildren(ListView listView) {
if(listView == null) return;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
将这个方法设置在
adapter.notifyDataSetChanged();
setListViewHeightBasedOnChildren(myListView);
后面,还是会出现这个问题.后来仔细查看自己adapter,是因为在我的adpter中会嵌套使用另一个adapter.
FrhForumLvItemGvAdapter adapter = new FrhForumLvItemGvAdapter(context, list);
holder3.gridView.setAdapter(adapter);
然后我就去查看了这个GVAdapter,发现在这个adapter中的getView方法return null
!!!!!!