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

  接下来的ListView的常用技巧是在平时的开发和学习中了解到的,如有雷同,纯属我抄!

  •   技巧1:设置项目间分隔线
  •   技巧2:隐藏滚动条
  •   技巧3:设置第一个可视条目是第几项
  •   技巧4:添加/取消item的点击效果.
  •   技巧5:处理数据项为空的时候的ListView
  •  技巧6:动态更新ListView

  

  下面依次介绍

  1.设置项目间的分割线

    这是个很常用的使用技巧,开发中可以使用ListView提供的divider和dividerHeight这个属性去完成,如下-->

    android:divider="#ff0000"   这里可以设置颜色等属性,可以自定义颜色的十六进制数值,也可以使用Android提供的颜色

    android:dividerHeight="5dp"  这里通过输入的数值设置分割线的高度

    ***某些时候可能不需要项目间的分隔线,如右--> android:divider="@null"

  2.隐藏滚动条

    隐藏滚动条很简单,只要在控件中加入一个属性便可,如右-->  android:scrollbars="none"

  3.设置第一个可视条目是第几项

    初始化ListView控件以后,再调用setSelection(int a)方法,

    private ListView listView;

    listView = (ListView)findViewById(R.id.listView);

    listView.setSelection(5);   //****这一句需要放在setAdapter之后执行

  4.添加/取消item的点击效果

    点击ListView中的一项,系统默认的会有一个点击效果.5.0以下是一个改变背景颜色的效果,5.0以上是一个波纹效果

    这个效果可以通过修改listSelector属性来添加/取消点击后的回馈效果,如下-->

    android:listSelector="#ff0000"

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

  5.处理数据项为空的时候的ListView

    开发中经常会遇到列表获取不到数据的情况,导致数据为空,这个时候如果什么都不做,就会显示一片空白,这样用户体验会非常不好.

    为了避免这种情况,,可以预先做一下处理.如下-->

    listView.setEmptyView();

  

  6.动态更新ListView

    列表数据发生改变的时候,可以通过重新设置ListView的Adapter来实现列表数据更新,但是这样会很不友好,效率也不高.

    这里可以用一个更简单的方法去处理.

    当数据列表的数据源发生改变时:adapter.notifyDataSetChange();

  代码:

  MainActivity.java

  

 package com.cx.listview;

 import java.util.ArrayList;

 import android.app.Activity;
 import android.os.Bundle;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.Button;
 import android.widget.ListView;
 import android.widget.Toast;

 public class MainActivity extends Activity {
     private Button button;
     private ListView listView;
     private MyAdapter adapter;
     private ArrayList<String> mDataList;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         button = (Button) findViewById(R.id.addData);
         listView = (ListView) findViewById(R.id.listView);

         initData();
         initView();
         initEvent();
     }

     private void initData() {
         mDataList = new ArrayList<String>();
         for(int i=0;i<40;i++){
             mDataList.add("这是条目"+(i+1));
         }
         adapter = new MyAdapter(this,mDataList);

     }
     private void initView() {
         listView.setEmptyView(View.inflate(this, R.layout.empty_view, null)); //处理空ListView
         listView.setAdapter(adapter);
         listView.setSelection(5);  //这一句需要放在setAdapter后面执行,否则无效

     }

     private void initEvent() {
         button.setOnClickListener(new OnClickListener() {

             @Override
             public void onClick(View v) {
                 mDataList.add(0, "新添加的数据!");
 //                mDataList.add("新添加的数据!");
                 adapter.notifyDataSetChanged();  //d动态修改ListView
             }
         });

         listView.setOnItemClickListener(new OnItemClickListener() {

             @Override
             public void onItemClick(AdapterView<?> parent, View view,
                     int position, long id) {
                 Toast.makeText(MainActivity.this, "这是第"+(position+1)+"个条目!", Toast.LENGTH_SHORT).show();

             }

         });

     }
 }

MyAdapter.java

 package com.cx.listview;

 import java.util.ArrayList;

 import android.content.Context;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.TextView;

 public class MyAdapter extends BaseAdapter {
     private ArrayList<String> mDataList;
     private Context context;
     public MyAdapter(Context context, ArrayList<String> mDataList) {
         this.mDataList = mDataList;
         this.context = context;
     }

     @Override
     public int getCount() {
         // TODO Auto-generated method stub
         return mDataList.size();
     }

     @Override
     public Object getItem(int position) {
         // TODO Auto-generated method stub
         return mDataList.get(position);
     }

     @Override
     public long getItemId(int position) {
         // TODO Auto-generated method stub
         return position;
     }

     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         // TODO Auto-generated method stub
         ViewHolder holder;
         if(convertView == null){
             holder = new ViewHolder();
             convertView = View.inflate(context, R.layout.list_item, null);
             holder.text = (TextView) convertView.findViewById(R.id.item_text);
             convertView.setTag(holder);
         }else{
             holder = (ViewHolder) convertView.getTag();
         }
         holder.text.setText(mDataList.get(position));

         return convertView;
     }

     class ViewHolder{
         TextView text;
     }

 }

activity_main.xml

  

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
 >

     <Button
         android:id="@+id/addData"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="添加数据"
         />
     <ListView
         android:id="@+id/listView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_margin="5dp"
         android:layout_below="@id/addData"
         android:divider="#ff0000"
            android:dividerHeight="5dp"
            android:scrollbars="none"
            android:listSelector="#00ff00"
         />

 </RelativeLayout>

empty_view.xml

  

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >

 <ImageView
     android:id="@+id/empty_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:src="@drawable/ic_launcher"
     />
 </LinearLayout>

  

  效果图:

  

  

    

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

  1. Android ListView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...

  2. Android ListView 常用技巧总结

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

  3. Android开发——ListView使用技巧总结(二)

    0.  前言 Android中的ListView是用的比较多的控件之一,在上一篇Android开发--ListView使用技巧总结(一)中对ListView的ViewHolder机制.优化卡顿方式以及 ...

  4. Android开发——ListView使用技巧总结(一)

    )还有一点就是要控制异步任务的执行频率,因为当用户频繁的上下滑动,会瞬间产生上百个异步任务,会带来无意义的大量的UI更新操作,因此可以考虑在列表滑动时停止进行异步任务,直到列表停下来. //判断列表的 ...

  5. Android EditText的常用技巧

    1.       设定 EditText 的滚动条.对齐方式.行数.和提示 (hint) 及其颜色 在布局文件,比如 main.xml 中,增加 < EditText android:id =  ...

  6. Android 中 ListView 常用属性合集

    class ListView.FixedViewInfo//用来在列表内展现一个固定位置视图,如在列表顶端的header和在列表底端的footer 一.XML属性 1.ListView的XML属性 a ...

  7. android 布局优化常用技巧

    android对多个模块都要是要的UI逻辑的致辞除了fragment之外,没有别的东西可以支持了, include,merge,viewstub只能支持公用的ui,但是这个通用支持不能包含逻辑(jav ...

  8. Android Activity 开发常用技巧整理

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

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

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

随机推荐

  1. Maven管理多模块项目

    首先,我们要明确的多模块项目的含义,它是指一个应用中包含多个module.一般来说,一个应用单独部署成服务,只是打包的时候,maven会把各个module组合在一起.各模块一般单独打成jar放到lib ...

  2. java的Socket通信例子及关于java.net.SocketException: Socket is closed错误

    今天写socket数据相互通信的时候,碰到一个及其蛋疼的错误.单向传输数据的时候server与client是没有问题的,但是两个都有输入输出操作的时候就出现了这个问题 java.net.SocketE ...

  3. 第二百三十九天 how can I 坚持

    去看了个电影,消失的凶手,乐视会员送的电影票,有点虐心,不过看着感觉还挺不错. 下了班就去看了,也没有吃饭,不过没感觉到饿,回来吃了份泡面,还喝了袋冰凉的酸奶,现在已经感觉肚子有点疼了,哎.. 哲学是 ...

  4. Android问题-DelphiXE8新建AVD出现“no system images installed for this target”

    相关资料: 1.http://www.cnblogs.com/yc-755909659/p/4080645.html 问题现象:创建Android模拟器提不”no system images inst ...

  5. jQuery基础学习6——基本选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Google中rel="canonical"的相关解释和用法

    转载原地址 http://blog.sina.com.cn/s/blog_673b01740100jxlz.html 近听到很多SEO 对在页面的规范版本用规范 URL 标签( canonical U ...

  7. Java NIO类库Selector机制解析(下)

    五.  迷惑不解 : 为什么要自己消耗资源? 令人不解的是为什么我们的Java的New I/O要设计成这个样子?如果说老的I/O不能多路复用,如下图所示,要开N多的线程去挨个侦听每一个Channel ...

  8. GLSL 基础量定义

    GLSL语法跟C语言非常相似: 1.数据类型: GLSL包含下面几种简单的数据类型 float bool :false or ture int 向量: vec   {2,3,4}     长度为2, ...

  9. 解决IE下jquery ajax无法获得最新数据的问题(IE缓存)

    今天修改一个bug,利用ajax查询数据,在谷歌浏览器下可以获取到最新数据,而在IE中获得是旧数据,无法获得最新的数据,经查资料,才发现时IE缓存再作怪. 发现此ajax请求用的get方式,每次请求的 ...

  10. 通过GitHub和Hexo搭建个人博客

    LinEvan个人博客 最终有自己的个人博客,逼格一下子提高说不少. 网上一搜教程一大堆,非常多已经写得非常好了,我就不凑这个热闹了.推荐一篇博文:怎样搭建一个独立博客--简明Github Pages ...