• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)


大家都知道listview的格式是一定的 而数据源确是多重多样的 这时候 就需要一种适配器来把数据源转换成listview要显示的格式

baseAdapter就诞生了。

\

listview和gridView的显示和缓存机制 如下图

\

大家都知道屏幕的大小是有限的 可是listview中的数据却可能很多 所以手机不能一下子展示所有的数据 它只会加载屏幕上显示的数据 。

如上图,当我们把屏幕往下滑动时 item1回收到recycler 而item8要显示在屏幕上 item8从recycler取出这样一个布局文件 并重新设置好item8要显示的数据 并设置要要显示的位置。总之一句话 需要才显示 显示完就被回收到缓存。

至于题目为何说BaseAdapter的三重境界(逗比式,普通式,文艺式) 区别在哪里那?就在如何运用listview的显示和缓存机制

在listview的适配器上 有这样一个方法

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		return null;
	}

其中逗比式 普通式 文艺式的区别就在于如何使用这个方法

下面我们通过一个实例 来比较adapter的三重境界孰强孰弱

要实现的效果如下

\

activity_main.xml

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
    <listview android:id="@+id/lv_listView" android:layout_width="match_parent" android:layout_height="match_parent"></listview>

</linearlayout>

item.xml
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">

    <imageview android:id="@+id/iv_image" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignparentleft="true" android:src="@drawable/ic_launcher">

    <textview android:id="@+id/tv_nickName" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_torightof="@id/iv_image" android:gravity="center_horizontal" android:textsize="20sp" android:text="昵称">

    <textview android:id="@+id/tv_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_torightof="@id/iv_image" android:layout_below="@id/tv_nickName" android:textsize="15sp" android:text="内容">

</textview></textview></imageview></relativelayout>

为了方便 ,我创建了一个myObject对象 用来封装item.xml要显示的数据

MyObject.class

package com.example.baseadapter;

import android.widget.ImageView;
import android.widget.TextView;

public class MyObject {
	private int imageViewId;
	private String nickName;
	private String content;

	public MyObject(int imageViewId, String nickName, String content) {
		this.imageViewId = imageViewId;
		this.nickName = nickName;
		this.content = content;
	}

	public String getNickName() {
		return nickName;
	}

	public String getContent() {
		return content;
	}

	public int getImageViewId() {
		return imageViewId;
	}

}

MainActivity.class
package com.example.baseadapter;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {
	private List list=new ArrayList();
	private ListView listView;
	private MyAdapter myAdapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listView=(ListView) findViewById(R.id.lv_listView);
		for(int i=0;i<50;i++){
			list.add(new MyObject(R.drawable.ic_launcher, "昵称"+i,	"内容"+i));
		}
		myAdapter=new MyAdapter(list, this);
		listView.setAdapter(myAdapter);
	}
}

自定义的adapter

MyAdapter.class

package com.example.baseadapter;

import java.util.List;

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

public class MyAdapter extends BaseAdapter {

	private long sum = 0;
	private List list;
	private Context context;

	public MyAdapter(List list, Context context) {
		this.list = list;
		this.context = context;
	}

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

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return list.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
		// 逗比式
		 long star = System.nanoTime();
		 View view=View.inflate(context, R.layout.item, null);
		 ImageView imageView =(ImageView) view.findViewById(R.id.iv_image);
		 TextView nickName=(TextView) view.findViewById(R.id.tv_nickName);
		 TextView content=(TextView) view.findViewById(R.id.tv_content);
		 MyObject myObject=list.get(position);
		 imageView.setBackgroundResource(myObject.getImageViewId());
		 nickName.setText(myObject.getNickName());
		 content.setText(myObject.getContent());
		 long end = System.nanoTime();
		 sum += end - star;
		 Log.d("main", "逗比式" + sum);
		 return view;
		// 普通式
//		long star = System.nanoTime();//获取系统纳秒时间
//		if (convertView == null) {
//			convertView = View.inflate(context, R.layout.item, null);
//		}
//		ImageView imageView = (ImageView) convertView
//				.findViewById(R.id.iv_image);
//		TextView nickName = (TextView) convertView
//				.findViewById(R.id.tv_nickName);
//		TextView content = (TextView) convertView.findViewById(R.id.tv_content);
//		MyObject myObject = list.get(position);
//		imageView.setBackgroundResource(myObject.getImageViewId());
//		nickName.setText(myObject.getNickName());
//		content.setText(myObject.getContent());
//		long end = System.nanoTime();
//		sum += end - star;
//		Log.d("main", "普通式" + sum);
//		return convertView;
		// 文艺式
		// long star = System.nanoTime();
		// ViewHolder viewHolder;
		// if (convertView == null) {
		// viewHolder=new ViewHolder();
		// convertView = View.inflate(context, R.layout.item, null);
		// viewHolder.imageView = (ImageView) convertView
		// .findViewById(R.id.iv_image);
		// viewHolder.nickName = (TextView) convertView
		// .findViewById(R.id.tv_nickName);
		// viewHolder.content = (TextView) convertView
		// .findViewById(R.id.tv_content);
		// //通过setTag方式 使viewHolder和convertView绑定在一起
		// convertView.setTag(viewHolder);
		// }
		// viewHolder=(ViewHolder) convertView.getTag();
		// MyObject myObject = list.get(position);
		// viewHolder.imageView.setBackgroundResource(myObject.getImageViewId());
		// viewHolder.nickName.setText(myObject.getNickName());
		// viewHolder.content.setText(myObject.getContent());
		// long end = System.nanoTime();
		// sum += end - star;
		// Log.d("main", "文艺式"+sum);
		// return convertView;
	}

	// 避免重复的findViewById
	class ViewHolder {
		public ImageView imageView;
		private Te



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)

相关文章

  • 2017-05-26Android Intent调用 Uri的使用几种格式,androidintent
  • 2017-05-26高仿人人网客户端Android版项目源码,高仿android
  • 2017-05-26Android DEX 基础,androiddex基础
  • 2017-05-26PagerTabStrip在ViewPager的页面中添加标题显示,viewpager添加页面
  • 2017-05-26Intent(三)向下一个活动传递数据,intent传递
  • 2017-05-26Android 数据库操作,android数据库操作
  • 2017-05-26Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现),relativelayout
  • 2017-05-26安卓---Toast工具类,有点懒,安卓---toast工具类
  • 2017-05-26activity的横屏和竖屏设置,activity
  • 2017-05-26我的android学习经历7,android学习经历7

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • overridePendingTransition,transition
    • 想要在launcher中模拟按home键。,launcherhome
    • android post带数据请求方式,传递的数据格式包括json和map,androidjson
    • Android 手机卫士1--实现splash页面,androidsplash
    • andriod绘制图形,andriod绘制
    • Android下拉刷新上拉加载更多的扩展ListView
    • android:SpannableString的应用,TextView中某些文字的点击事件
    • 转载 Android 多线程处理之多线程用法大集合,android大集合
    • 7.2.2 Android JSON数据解析
    • 浅谈Android应用保护(一):Android应用逆向的基本方法,浅谈android

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有