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. USACO 2013 November Contest Gold 简要题解

    Problem 1. Empty Stalls 扫两遍即可. Problem 2. Line of Sight 我们发现能互相看见的一对点一定能同时看见粮仓的某一段.于是转换成有n段线段,问有多少对线 ...

  2. 【bz2002】弹飞绵羊

    题意: 给出n个节点 及其父亲 和m个指令1:表示求节点i到根节点(n+1)的距离2:表示将节点i的父亲更换为j 题解: 动态树link.cut.access模板题 貌似没什么难度- - 代码: #i ...

  3. Adress

    流水账的写法:因为不想让亲爱的你只看开头就关掉了我辛苦的劳作.流水账的好处是:便于逻辑的理解 http://software.intel.com/zh-cn/blogs/2014/01/20/cent ...

  4. Spark RDD概念学习系列之Spark的算子的分类(十一)

    Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...

  5. hibernate hbm2ddl auto 不能创建表的问题

    http://fuckgis.blog.sohu.com/148751122.html ________________________________________________________ ...

  6. [iOS微博项目 - 1.2] - 导航栏搜索框

    A.导航栏搜索框 1.需求 在“发现”页面,在顶部导航栏NavigationBar上添加一个搜索框 左端带有“放大镜”图标 github: https://github.com/hellovoidwo ...

  7. 在WinForm中使用Web Service来实现软件自动升级

    来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...

  8. 利用 SQL Monitor 查看语句运行状态步骤

    利用 SQL Monitor 查看语句运行状态步骤 1.确定语句被 SQL Monitor 监控 SQL> SELECT * FROM GV$SQL_MONITOR WHERE sql_id=' ...

  9. IoC/DI

    From:http://jinnianshilongnian.iteye.com/blog/1471944 我对IoC/DI的理解 博客分类: spring杂谈 IoCDI  IoC IoC: Inv ...

  10. CKeditor3.6.2 配置与精简

    一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...