Android开发之ListView-BaseAdapter的使用
ListView优化原则:
UI优化:
listview条目与条目之间的间隙的分割内容 : android:divider="@android :color/transparent"
listview条目之间的间隙 : android:paddingTop="5.0dip"
listview点中的颜色变化 : android:listSelector="@color/transparent"
在listview的右边 会显示出来一个快速滚动的进度条 : android:fastScrollEnabled="true"
数据适配性能优化:
1.复用历史缓存的view对象 converview,减少采用布局填充器服务和填充布局的次数,达到减少xml->view 操作的次数.
2.定义静态的viewholder ,储存了view对象里面控件的引用, view.setTag() view.getTag(),减少遍历view对象 树状结构的次数
3.采用了内存缓存,缓存一些经常使用的数据:
服务器上的图片,缓存这些图片到手机的Rom卡,sd卡,然后把图片给缓存到内存里面;
缓存从数据库中查询出的所有数据,减少查询数据库的动作
高级优化:
listview的延时加载: 如果listview里面要显示的有很多的数据, 我们不需要一次把所有的数据都获取出来.
分批的加载数据:注册listview滚动监听器onScrollListener(),发现最后一个可见的条目 为listview里面数据适配器里面的最后的一个条目, 从服务器加载更多的内容.
分页的加载数据:服务器需要提供接口, 一次获取一段的数据;数据库提供接口 ,一次查询一段的数据.
listview的快速拖动优化:
当listview在滚动状态下,不去加载listview里面真实的图片和内容,而是把一个缩略图加载界面上.
当listview的滚动状态停止的时候 才去真正的更新里面的条目的内容.
如何让你的ListView实现自动滚动呢? Android其实已经考虑到ListView控件的智能滚动操作。
直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性。
BaseAdapter,官网链接--http://developer.android.com/intl/zh-cn/reference/android/widget/BaseAdapter.html
继承:Object
接口:ListAdapter SpinnerAdapter
已知直接子类:
ArrayAdapter<T>, CursorAdapter, SimpleAdapter
已知间接子类:
ResourceCursorAdapter, SimpleCursorAdapter
使用BaseAdapter,需要实现4个方法:
getCount() --返回需要ListView显示的item数量
getItem(int position) --返回item的位置
getItemId(int position) --返回item的id
getView(int position, View convertView, ViewGroup parent) --显示item的内容
--------------------------------------------------------------------------------------------------------------------------------------
实例(创建一个通讯录):
MainActivity.java代码
- public class MainActivity extends Activity {
- private ListView phoneList;
- private MyAdapter adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- GetPhone.getPhone(MainActivity.this);
- phoneList = (ListView) findViewById(R.id.phoneList);
- adapter = new MyAdapter(GetPhone.lists, MainActivity.this);
- phoneList.setAdapter(adapter);
- }
- }
- 布局文件activity_main.xml
- <LinearLayout 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"
- android:orientation="vertical"
- tools:context="com.lijingbo.getmyphonenumber.MainActivity" >
- <ListView
- android:id="@+id/phoneList"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- </ListView>
- </LinearLayout>
获取通讯录中联系人的姓名和号码,GetPhone.java
- public class GetPhone {
- static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
- public static List<PhoneInfo> getPhone(Context context) {
- ContentResolver contentResolver = context.getContentResolver();
- Cursor cursor = contentResolver.query(Phone.CONTENT_URI, null, null,
- null, null);
- while (cursor.moveToNext()) {
- String number = cursor.getString(cursor
- .getColumnIndex(Phone.NUMBER));
- String name = cursor.getString(cursor
- .getColumnIndex(Phone.DISPLAY_NAME));
- Log.d("getmyphonenumber", name + "电话号码:" + number);
- PhoneInfo phoneInfo = new PhoneInfo(name, number);
- lists.add(phoneInfo);
- }
- return lists;
- }
- }
实体类 PhoneInfo.java
- public class PhoneInfo {
- private String name;
- private String number;
- public PhoneInfo(String name, String number) {
- setName(name);
- setNumber(number);
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getNumber() {
- return number;
- }
- public void setNumber(String number) {
- this.number = number;
- }
- }
MyAdapter.java
- public class MyAdapter extends BaseAdapter {
- private List<PhoneInfo> lists;
- private Context context;
- public MyAdapter(List<PhoneInfo> lists,Context context){
- this.lists=lists;
- this.context=context;
- }
- @Override
- public int getCount() {
- return lists.size();
- }
- @Override
- public Object getItem(int position) {
- return position;
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder=null;
- if (convertView==null) {
- holder=new ViewHolder();
- convertView=LayoutInflater.from(context).inflate(R.layout.phonedetails, null);
- holder.showName=(TextView) convertView.findViewById(R.id.showName);
- holder.showNumber=(TextView) convertView.findViewById(R.id.showNumber);
- convertView.setTag(holder);
- }else {
- holder=(ViewHolder) convertView.getTag();
- }
- holder.showName.setText(lists.get(position).getName());
- holder.showNumber.setText(lists.get(position).getNumber());
- return convertView;
- }
- static class ViewHolder{
- public TextView showName;
- public TextView showNumber;
- }
- }
- phonedetails.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="horizontal" >
- <TextView
- android:id="@+id/showName"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="name"/>
- <TextView
- android:id="@+id/showNumber"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:text="number"/>
- </LinearLayout>
Android开发之ListView-BaseAdapter的使用的更多相关文章
- 【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的 ...
- Android开发之ListView添加多种布局效果演示
在这个案例中展示的新闻列表,使用到ListView控件,然后在适配器中添加多种布局效果,这里通过重写BaseAdapter类中的 getViewType()和getItemViewType()来做判断 ...
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
我们有时候会遇到这么一个情况.就是我在一个ListView里面须要显示的东西事实上是有种类之分的.比方我要分冬天,夏天.秋天.春天,然后在这每一个季节以下再去载入各自的条目数据. 还有,比方我们的通讯 ...
- android 开发之 ListView 与Adapter 应用实践
在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...
- Android开发之ListView设置隔行变色
public class HLCheckAdapter extends BaseAdapter { private List<HuoLiang> list; private Context ...
- Android开发之ListView条目批量选择删除
ListView实现的列表,假设是可编辑,可删除的,一般都要提供批量删除功能,否则的话,一项一项的删除体验非常不好,也给用户带来了非常大的麻烦. 实现效果图 详细实现代码 select.xml 主布局 ...
- Android开发之ListView详解 以及简单的listView优化
ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...
- android开发之 listview中的item去掉分割线 隐藏分割线
有三种方法: 1> 设置android:divider="@null" 2> android:divider="#00000000" #000000 ...
- 【Android UI】Android开发之View的几种布局方式及实践
引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
随机推荐
- Json字符与Json对象的相互转换
Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 复制代码 代码如下: $.parseJ ...
- 粵語/廣東話/Cantonese 資料/Material
一.粵語歌詞網 1.海闊天空(粵語) 歌詞 今天我 寒夜裡看雪飄過 gam1 tin1 ngo5 hon4 je6 leoi5 hon3 syut3 piu1 gwo3 懷著冷卻了的心窩漂遠方 waa ...
- mysql学习笔记4
用phpmyadmin创建数据库时出现 #1064 - You have an error in your SQL syntax; check the manual that corresponds ...
- 4.MySQL连接并选择数据库(SQL & C)
在连接了MySQL数据库之后,可以通过SQL命令或者C.PHP.JAVA等程序来指定需要操作的数据库.这里主要介绍SQL命令和相应的C程序. 首先创建用户rick(赋予所有权限) mysql> ...
- C#方法解析
“方法”是包含一系列语句的代码块. 程序通过“调用”方法并指定所需的任何方法参数来执行语句. 在 C# 中,每个执行指令 都是在方法的上下文中执行的. 最近在写一个反射调用时,需要通过反射来调用方法. ...
- MySQL之count(*)与count(id)效率比较(转)
优化总结: 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择: 2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ’ ...
- ubuntu漂亮主题
桌面看腻了?试试这 4 款漂亮的 Linux 图标主题吧 http://linux.cn/article-4332-1.html Flatabulous https://github.com/anmo ...
- Codeforces Round #334 (Div. 1) C. Lieges of Legendre
Lieges of Legendre 题意:有n堆牛,每堆有ai头牛.两个人玩一个游戏,游戏规则为: <1>从任意一个非空的堆中移走一头牛: <2>将偶数堆2*x变成k堆,每堆 ...
- cocos2dx 3.4 截图代码
Size size = Director::sharedDirector()->getWinSize(); //定义一个屏幕大小的渲染纹理 RenderTexture* pScreen = Re ...
- 【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案
将JDK从6升级到了7(或从其他电脑移植DBV文件夹后),每当启动DbVisualizer 6的时候都会报空指针异常 在官网上找到了相关的方案,如下: In the DbVisualizer inst ...