美文网首页
scrollview嵌套listview,其中listview多

scrollview嵌套listview,其中listview多

作者: 凉风入梦 | 来源:发表于2018-01-19 14:40 被阅读0次

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

    相关文章

      网友评论

          本文标题:scrollview嵌套listview,其中listview多

          本文链接:https://www.haomeiwen.com/subject/tmcwnxtx.html