Android ListView 常用技巧
Android TextView 常用技巧

1.使用ViewHolder提高效率
ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在调用getView()的时候都去通过findViewById()实例化控件。需要做的就是在自定义Adapter中定义一个内部类ViewHolder,并将布局中的控件作为成员变量。代码如下:

public final class ViewHolder {
    public ImageView img;
    public TextView title;
}

接下来,只需要在getView()方法中通过视图缓存机制来重用以缓存即可,在getView()中使用Holder的实例代码如下:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    // 判断是否缓存
    if (convertView == null) {
        holder = new ViewHolder();
        // 通过LayoutInflater实例化布局
        convertView = LayoutInflater.from(context).inflate(R.layout.viewholder_item, null);
        holder.img = (ImageView) convertView.findViewById(R.id.imageView);
        holder.title = (TextView) convertView.findViewById(R.id.textView);
        convertView.setTag(holder);
    } else {
        // 通过tag找到缓存的布局
        holder = (ViewHolder) convertView.getTag();
    }

    // 设置布局中控件要实现的视图
    holder.img.setBackGroundResource(R.drawable.ic_launcher);
    holder.title.setText(mData.get(position));
    return convertView;
}

2.设置Item间分割线
ListView的各个Item之间,可以通过设置分割线来进行区分,系统提供了divider 和 dividerHeight两个属性来帮助我们实现这个功能。我们不仅仅能够控制分割线的颜色和高度,同样我们也可以将分割线设置为一个图片资源,分割线的使用代码如下:

android:divider="@android:color/draker_gray"
android:dividerHeight="10dp"

如果我们想将分割线设置为透明(就是分割线不可见,但是可以设置高度)。

android:divider="@null"

3.隐藏ListView的滚动条
默认的ListView在滚动时,右边会显示滚动条,指示当前滑动的位置,我们可以设置ScrollView属性,控制ListView的滚动条状态,当设置其属性为none的时候ListView滚动或者不滚动都不会出现滚动条了,代码如下:

android:scrollbars="none"

4.取消ListView的Item点击效果
在点击ListView中的一项的时候,系统默认会出现一个点击效果,在Android 5.X上是一个波纹效果,而在Android 5.X以下的版本则是一个改变背景颜色的效果,但是可以通过修改listSelector属性来取消点击后的反馈效果,代码如下

android:listSelector="#00000000"

或者使用Android自带的透明色来实现:

android:listSelector="@android:color/transparent"

5.设置ListView需要在显示在第几项
ListView以Item为单位进行显示,默认显示在第一个Item,当需要指定具体显示的Item时,可以通过如下代码来实现:

listView.setSelection(N);

这个方法类似于scrollTo,是瞬间完成的移动,除此之外,可以使用如下代码来实现平滑移动:

mListView.smoothScrollBy(distance, duration)p;
mListView.smoothScrollByOffset(offset);
mListView.smoothScrollToPosition(index);

6.处理空ListView
ListView用于展示列表数据,但当列表无数据是,ListView不会展示任何数据或提示,按照完善用户体验的要求,这里应该给以无数据的提示。好在ListView的父类AdapterView提供了方法---setEmptyView(),通过这个方法我们可以给ListView设置一个空数据下的默认显示。

7.ListView滑动监听
ListView的滑动监听,是ListView使用中比较重要的技巧,很多重写的ListView,基本上都是在滑动事件的处理上下功夫,通过滑动时间进行不同的逻辑处理。而为了更加精确的监听滑动事件,开发者通常还需要使用GestureDetector手势识别、VelocityTracker滑动速度检测等辅助来完成更好的监听。这里介绍两种监听ListView的方法,一个是通过OnTouchListener来实现监听,另一个是使用OnScrollListener来监听。
(1).OnTouchListener
OnTouchListener是View的监听事件,通过监听ACTION_DOWN,ACTION_MOVE,ACTION_UP这三个事件发生时的坐标,就可以根据坐标判断用户滑动的方向,并在不同的事件中进行相应的处理逻辑,使用的代码如下:

mListView.setOnTouchListener(new View.OnTouchListener(){
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                // 触摸时操作
                break;
            case MotionEvent.ACTION_MOVE:
                // 移动时操作
                break;
            case MotionEvent.ACTION_UP:
                // 离开时操作
                break;
        }
        return false;
    }
});

(2).OnScrollListener
OnScrollListener是AbsListView中的监听事件,它封装了很多ListView相关的信息,使用起来较为灵活:

mListView.setOnScrollListener(new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        switch(scrollState) {
            case OnScrollListener.SCROLL_STATE_IDLE:
                // 滑动停止时
                break;
            case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                // 正在滚动
                break;
            case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
                // 手指抛动时,即手指用力滑动
                // 在离开后ListView由于惯性继续滑动
                break;
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstItem, int visibleItemCount, int totalItemCount) {
        /// 滚动时一直调用
    }
});

Android ListView 常用技巧的更多相关文章

  1. Android ListView 常用技巧总结

    本文对 ListView 中的一些常用技巧做一个总结.附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView.当然,后续我会在我的博客 ...

  2. Android之ListView常用技巧

    ListView是一个非常常用的列表控件,虽然在5.x时代ListView的风头正在逐渐的被RecyclerView抢去,但是ListView的使用范围依然十分广泛. 接下来的ListView的常用技 ...

  3. Android adb 常用技巧

    1.在命令行管理模拟器设备(AVD) list:列出机器上所有已经安装的Android版本和AVD设备 list avd:列出机器上所有已经安装的AVD设备: list target:列出机器上所有已 ...

  4. Android Activity 常用技巧

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  5. Android TextView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 TextView在Android中实现文字说明等功能,基本的使用都很简单,那么除了基本展示文字的使用,我们还能够 ...

  6. Android Studio 常用技巧

    1.在控制台输出语句方法 //在控制台输出语句 System.out.println("like"); //方式1 Log.d("002","lind ...

  7. Android群英传知识点回顾——第四章:ListView常用优化技巧

    4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...

  8. 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析

    第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...

  9. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 最近也是比较迷茫,但是有一点点还是要坚持的,就是学习了,最近离职了,今天也是继续温习第四章ListView,也拖了其实也挺久的了,list ...

随机推荐

  1. IE 浏览器 如何关闭令人讨厌的“此网站需要运行以下加载项:XXX。如果您信任该网站和该加载项并允许运行该加载项,请单击这里...

    1.运行gpedit.msc 2.在打开的组策略中打开用户配置——管理模板——Windows组件——Internet Explorer 3.选择“关闭ActiveX选择启用提示”,将其状态改为“已启用 ...

  2. Postman-CI集成Jenkins

    Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Newman 官方说明:Postman's command-line companion lets you ...

  3. C#的对象赋值

    例如 Class A {       int x = 0;       int y = 0; }   public void test() {       A test1 = new A( );   ...

  4. java 基础题 很基础, 很有趣

    都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...

  5. ArcGIS百米网格自动生成

    最近需要用百米网格进行空间叠加分析,首先得自动生成百米网格数据.经过查找,发现ARCgis可以自动生成网格.方法如下 2.创建格网(Creat Fishnet).需要用到ArcGIS的ArcToolb ...

  6. iOS开发零基础--Swift篇 循环

    循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...

  7. Android中,图片分辨率适配总结规则drawable drawable-mdpi drawable-hdpi drawable-nodpi drawable-ldpi

    一直关于android多分辨率适配有些疑惑,从网上找到一些资料并通过测试验证,参考链接:http://blog.csdn.net/lamp_zy/article/details/7686477 现记录 ...

  8. code review

    代码审核,开发者代码完工,就可以下一个环节,即代码审核,通过代码审核,可以看到多个开发者的代码规范,隐藏的BUG,一些注释等规范. 通过代码审核,我们开发者可以互相学习,使得代码逻辑正确,重用

  9. NGUI 3.0.7的新锚点系统设置不好就会造成显示错误的错觉

    每次设置NGUI控件的锚点时,都需要刷新一下窗口,不然就会造成显示错误的错觉. 同时,NGUI控件设置锚点的参考对象为一个物体时还需要调整其控件大小,不然也会造成显示错误的错觉.

  10. java多线程(精华版)

    在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...