出現的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
!!!!!!