Scrollview嵌套listView数据显示不正常问题

来源:互联网 发布:淘宝买小电影怎么搜索 编辑:程序博客网 时间:2024/05/17 22:36

ScrollView 嵌套listview 数据显示不全的问题解决方案:

   提供一种比较中意的解决方案,不需要自己去测量高度,省了很多事。具体方案如下:

定义一个自己的listView,重写屡试不爽。如果即使重写之后还不能显示完全,在加上一句 scrollView.scrollTo(0,0)

@Override    /**     * 重写该方法,达到使ListView适应ScrollView的效果     */    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }

今天使用pulltorefreshScrollview 嵌套一个listView 不显示数据,试了网上所有的方法,结果都没解决。一番调试之后,发现问题是这样的。

在数据刚刚初始化的时候就setadapter了,此时的list中还没有数据,如下:

  RecentMessages = new ArrayList<>();        adapter = new RecentChatAdapter(getActivity(),RecentMessages);        list_recent_chat.setAdapter(adapter);

在获取到数据之后调用,NotifyDataSetChange方法,结果还是不显示。经过一番查证之后,Adapter中getcount方法的size始终为0.sortMessage方法主要是对数据进行排序,返回LIst ,这个不多说。

 RecentMessages=sortMessage(recentMessages);<pre name="code" class="java">adapter.notifyDataSetChanged();

  这就是为什么不显示的原因。很容易看出,执行这句代码之后,

RecentMessages=sortMessage(recentMessages);

recentMessages的地址变了,无论你怎么刷新listview 始终都是0.


解决办法:将刷新添加的数据添加进数组:

RecentMessages.addAll(sortMessage(recentMessages));

问题解决!!


解决数据显示不全或不显示问题之后,今天又遇到了一个新的问题,当scrollView 与listview 显示时,总是显示在listview 的item处,而不是scrollView 的顶部。首先我理解为焦点问题,进入界面之后listview 首先抢到了焦点,但是设置focusable=false后,效果还是没变。 就想改变scrollView 显示的位置,通过设置scrollView.scrollTo(0,0);结果也是没有效果,最后查阅资料发现设置一下代码,起了效果。虽然问题解决,但是还是不明白为什么前者不行呢,有知道的求解答!

sc_scroolview.smoothScrollTo(0,0);
sc_scroolview.smoothScrollTo(0,0);
如果在设置以上方法不起作用的话,需要设置listView的focusable为false
sc_scroolview.smoothScrollTo(0,0);

0 1