Android之ListView常用技巧
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常用技巧的更多相关文章
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
- Android ListView 常用技巧总结
本文对 ListView 中的一些常用技巧做一个总结.附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView.当然,后续我会在我的博客 ...
- Android开发——ListView使用技巧总结(二)
0. 前言 Android中的ListView是用的比较多的控件之一,在上一篇Android开发--ListView使用技巧总结(一)中对ListView的ViewHolder机制.优化卡顿方式以及 ...
- Android开发——ListView使用技巧总结(一)
)还有一点就是要控制异步任务的执行频率,因为当用户频繁的上下滑动,会瞬间产生上百个异步任务,会带来无意义的大量的UI更新操作,因此可以考虑在列表滑动时停止进行异步任务,直到列表停下来. //判断列表的 ...
- Android EditText的常用技巧
1. 设定 EditText 的滚动条.对齐方式.行数.和提示 (hint) 及其颜色 在布局文件,比如 main.xml 中,增加 < EditText android:id = ...
- Android 中 ListView 常用属性合集
class ListView.FixedViewInfo//用来在列表内展现一个固定位置视图,如在列表顶端的header和在列表底端的footer 一.XML属性 1.ListView的XML属性 a ...
- android 布局优化常用技巧
android对多个模块都要是要的UI逻辑的致辞除了fragment之外,没有别的东西可以支持了, include,merge,viewstub只能支持公用的ui,但是这个通用支持不能包含逻辑(jav ...
- Android Activity 开发常用技巧整理
1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...
- Android群英传知识点回顾——第四章:ListView常用优化技巧
4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...
随机推荐
- Android“This Handler class should be static or leaks might occur”警告的处理方法
此文属于转载! 最近用到handle在线程中改变UI,会跟给出“This Handler class should be static or leaks might occur”的警告,网上看了很多解 ...
- Apache Spark GraphX的简介
简单地说,GraphX是大规模图计算框架. GraphX 是 Spark 中的一个重要子项目,它利用 Spark 作为计算引擎,实现了大规模图计算的功能,并提供了类似 Pregel 的编程接口. Gr ...
- YII开发技巧分享——模型(models)中rules自定义验证规则
YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规 ...
- 【现代程序设计】【homework-05】
这次作业的运行效果图: 新建了20个客户端线程,服务器相应开了20个线程接收客户端数据,每一秒输出每一轮的结果 这次作业用c#完成 利用 Socket 类实现了局域网中的客户端和服务器之间的通信 主要 ...
- mysql从一个表中拷贝数据到另一个表中sql语句
这一段在找新的工作,今天面试时,要做一套题,其中遇到这么一句话,从一个表中拷贝所有的数据到另一个表中的sql是什么? 原来我很少用到,也没注意过这个问题,面试后我上网查查,回来自己亲手写了写,测试了下 ...
- HDU 3911 Black And White (线段树区间合并 + lazy标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3911 给你n个数0和1,m个操作: 0操作 输出l到r之间最长的连续1的个数 1操作 将l到r之间 ...
- dll开发中遇到的问题
刚碰到个问题,我的一个项目中引用了一个dll,这个dll又引用了另一个dll,我把这俩个都放在bin文件夹下,但是会报错,说第二个dll找不到.把它放到系统文件夹system32下就没事了. 但是遇到 ...
- 沉金板VS 镀金板
沉金板VS 镀金板一.沉金板与镀金板的区别1.原理区别FLASH GOLD 采用的是化学沉积的方法!PLANTINGGOLD 采用的是电解的原理!2.外观区别电金会有电金引线,而化金没有.而且若金厚要 ...
- Linux下修改用户home目录
一般在Linux上新建一个用户,会在/home目录下自动创建一个以用户名命名的home目录 修改linux下用户自动建立的家目录 vi编辑器打开/etc/default/useradd 这个文件,然后 ...
- ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据
本文演示如何使用2种不同的方法从 SQL Server 生成 XML. 方法1:使用了 SqlCommand 的 ExecuteXmlReader 方法获取 XmlReader,然后使用 Data ...