Android ListView 常见问题与使用总结

一、机制

ListView机制 - 先执行getCount,然后执行getView。如果getCount返回0,不执行getView

Gallery convertView不会复用,每次都返回NULL

二、问题整理

ListView最下面一个item没有横线(Divider)?

listview的布局高使用wrap_content,应该使用fill_parent

去除行与行之间的黑线:

List.setDivider(null);

切记ListView高度不能设置成wrap_content

会导致多次整个页面刷新

动态修改Item高度 - ItemRootView.getLayoutParams().height = heightValue;

尝试使用margin、Child height都无效

Item Root设置高度失效,可以通过设置子视图高度解决。(ListView ItemView 子视图设置margin无效)

两层,内层使用margin,外层使用FrameLayout失效,改成Linearlayout有效。例如Htc G12 就会失效。

三、常用属性

ListView Item selector

item.xml 外层LinearLayout设置selector.xml后,内层再设置bakcground没有选中效果。

因为点击后下层其实改变了,但是被上层给盖住了,这是常识。。。。。

点击父视图,子视图是否被选中,例如button

去除选中时的黄色底色

android:listSelector="#00000000"

android:listSelector="@null"   // 这样设置无效

1. 是否显示ScrollBar

2. 关闭OverScroll , 有些手机上OverScroll有类似FadingEdge效果

listView.setOverScrollMode(View.OVER_SCROLL_NEVER);

3. 去除拖动时默认的黑色背景:

android:cacheColorHint="#00000000"

5. ListView刷新后自动滚到最底部:

List.setSelection(msgList.getAdapter().getCount()-1);

6. 去除ListView滑到顶部和底部时边缘的黑色阴影:

android:fadingEdge="none"

** 异常

get item type 从0开始,出现以下异常说明,getItemViewType 返回类型个数超过getViewTypeCount。

当前异常是getItemViewType 返回3种类型的id,而getViewTypeCount
= 2

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2

at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:7188)

at android.widget.ListView.measureHeightOfChildren(ListView.java:1338)

at android.widget.ListView.onMeasure(ListView.java:1238)

at android.view.View.measure(View.java:15729)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4854)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)

at android.view.View.measure(View.java:15729)

at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645)

at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425)

at android.view.View.measure(View.java:15729)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4854)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at android.view.View.measure(View.java:15729)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4854)

at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)

at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)

at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)

at android.view.View.measure(View.java:15729)

at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4854)

at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)

at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2344)

at android.view.View.measure(View.java:15729)

at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1948)

at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)

at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1300)

at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)

at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4498)

at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)

at android.view.Choreographer.doCallbacks(Choreographer.java:562)

at android.view.Choreographer.doFrame(Choreographer.java:532)

at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)

at android.os.Handler.handleCallback(Handler.java:725)

at android.os.Handler.dispatchMessage(Handler.java:92)

at android.os.Looper.loop(Looper.java:137)

at android.app.ActivityThread.main(ActivityThread.java:5105)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:511)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

at dalvik.system.NativeStart.main(Native Method)

onScroll 滚动状态判断

onScrollListener

SCROLL_STATE_IDLE 滑动后静止

SCROLL_STATE_FLING 手指离开屏幕后,惯性滑动

SCROLL_STATE_TOUCH_SCROLL 手指在屏幕上滑动

测试相关

ActivityThread中代码,此代码调用onSaveInstanceState。mInstrumentation负责调用on***方法

mInstrumentation.callActivityOnSaveInstanceState(r.activity, state);

GridVie 不显示滚动条

android:scrollbars="none"与

setVerticalScrollBarEnabled(true);

时间: 2024-08-18 23:36:42

Android ListView 常见问题与使用总结的相关文章

Android WebView 常见问题锦集!

收集了一些资料,集中整理一下,以备不时之需,顺便也分享一下,如果觉得好的,麻烦点个赞,觉得没什么意义的可以直接飘过,嘎嘎~~~~ Android 解析比较详细的文章 http://blog.csdn.net/t12x3456/article/list/2 1.Android的WebView控件载入网页显示速度慢的究极解决方案 http://www.cnblogs.com/xinye/p/3144139.html 2.WebView中的Java与JavaScript提供[安全可靠]的多样互通方案

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

Android——ListView多布局+适配器(二)

Android--ListView多布局+适配器(二) <span style="font-size:18px;">package com.example.administrator.newstop.entity; /** * Created by Administrator on 2016/8/4. */ public class News { private String title; private String pubDate; private int img; p

Android ListView复杂列表优化实践

原文:Android ListView复杂列表优化实践 很多社交App都不免会涉及到复杂的列表元素实现,一个列表上面可能大量的图片,不定长的评论列表,给手机端的程序员带来了不少的挑战.本文就是在实现复杂的列表滑动的情况下,利用已知的优化方法指导下的一次优化实践,旨在提升ListView的滑动流畅度,为用户带来良好的体验. 1:设计稿: 这是列表中可能出现的ItemView,有两种,但是又有许多相同的地方,比如一样有点赞的图片,评论等...其中,评论和点赞的数量是可变的. 2:使用一般布局带来的问

[转]Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件

Android ListView最佳处理方式,ListView拖动防重复数据显示,单击响应子控件. 1.为了防止拖动ListView时,在列表末尾重复数据显示.需要加入 HashMap<Integer,View> lmap = new HashMap<Integer,View>();其中Integer为列表位置,View为子项视图,加入数据前首先if (lmap.get(position)==null) ,满足条件时,加入lmap.put(position, convertView

android listview级联三菜单选择地区,本地数据库sqlite级联地区,item选中不变色

前言:因为找了N多网上的资源都没有好的解决方案,别人都是只给思路没给具体源码,真TMD纠结,干嘛求别人,自己动手才是真,最痛恨那些所谓大牛的作风,给了点点代码就让别人去想,你让我们这种小白情何于堪!!!!!!此例是基于listview来实现本地sqlite实现的! 二话不说,程序猿求的是有图有真相有源码!大家下载后有什么问题可以找到本人:QQ508181017 核心代码如下 1.数据库操作类 package com.icq.demo.db; import java.util.ArrayList;

关于android:listview getChildAt 为空的解释

今天遇到了一个很奇怪的问题,我所设定的一个listview 有10个item,当我的 list.getCount 的数量对其进行for 循环的时候,当到第6个item的时候,得到的view对象却是null,这让我很费解,经过一番查询,明白了这个问题是怎么回事,与大家分享下: 如图片红框部分的listview部分.这其实涉及到android的listview控件的内存处理问题:当我们加载listview时,如果这个listview的数据量比较多,它是显示不完全的,但这时是否是所有的数据都已经加载?

android Listview分批加载+自动加载(附源码下载)

直接上代码,代码有注释: public class TestForListviewActivity extends Activity implements OnScrollListener { private ListView mListview = null; private View mFooterView; private PaginationAdapter mAdapter; private Handler handler=new Handler(); private boolean i

Android ListView常见属性问题

Question 1: listview在拖动的时候背景图片消失变成黑色背景.等到拖动完毕我们自己的背景图片才显示出来. 解决办法: xml中: android:scrollingCache="false"  或者 android:cacheColorHint="#00000000" 代码中: setScrollingCacheEnabled(false)  或者 setCacheColorHint(0)  或者setCacheColorHint(Color.TRA