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 ...
随机推荐
- USACO 2013 November Contest Gold 简要题解
Problem 1. Empty Stalls 扫两遍即可. Problem 2. Line of Sight 我们发现能互相看见的一对点一定能同时看见粮仓的某一段.于是转换成有n段线段,问有多少对线 ...
- 【bz2002】弹飞绵羊
题意: 给出n个节点 及其父亲 和m个指令1:表示求节点i到根节点(n+1)的距离2:表示将节点i的父亲更换为j 题解: 动态树link.cut.access模板题 貌似没什么难度- - 代码: #i ...
- Adress
流水账的写法:因为不想让亲爱的你只看开头就关掉了我辛苦的劳作.流水账的好处是:便于逻辑的理解 http://software.intel.com/zh-cn/blogs/2014/01/20/cent ...
- Spark RDD概念学习系列之Spark的算子的分类(十一)
Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...
- hibernate hbm2ddl auto 不能创建表的问题
http://fuckgis.blog.sohu.com/148751122.html ________________________________________________________ ...
- [iOS微博项目 - 1.2] - 导航栏搜索框
A.导航栏搜索框 1.需求 在“发现”页面,在顶部导航栏NavigationBar上添加一个搜索框 左端带有“放大镜”图标 github: https://github.com/hellovoidwo ...
- 在WinForm中使用Web Service来实现软件自动升级
来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...
- 利用 SQL Monitor 查看语句运行状态步骤
利用 SQL Monitor 查看语句运行状态步骤 1.确定语句被 SQL Monitor 监控 SQL> SELECT * FROM GV$SQL_MONITOR WHERE sql_id=' ...
- IoC/DI
From:http://jinnianshilongnian.iteye.com/blog/1471944 我对IoC/DI的理解 博客分类: spring杂谈 IoCDI IoC IoC: Inv ...
- CKeditor3.6.2 配置与精简
一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...