`

android之listView缓存机制

阅读更多

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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.day_05_06.MainActivity" >


<ListView
android:id="@+id/lvGenerals"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ccc"
android:dividerHeight="20dp"/>


</RelativeLayout>

MainActivity.java:

package com.example.day_05_06;


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


import com.litsoft.General.General;


import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {
private ListView lvGenerals;//listView对象
private List<General> generals ;//数据集合
private BaseAdapter adapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
private void initView() {
// TODO Auto-generated method stub
lvGenerals = (ListView) findViewById(R.id.lvGenerals);
adapter = new GeneralAdapter(this,generals);
lvGenerals.setAdapter(adapter);
}
private void initData() {
// TODO Auto-generated method stub
generals = new ArrayList();

int [] images = new int[] {
R.drawable.baiqi,R.drawable.caocao,R.drawable.chengjisihan,
R.drawable.hanxin,R.drawable.lishimin,R.drawable.nuerhachi,
R.drawable.sunbin,R.drawable.sunwu,R.drawable.yuefei,
R.drawable.zhuyuanzhang
};
String [] names = getResources().getStringArray(R.array.generals);
for(int i=0;i<images.length;i++){
General general = new General(images[i],names[i]);
generals.add(general);
}
}
class GeneralAdapter extends BaseAdapter{
private Context context;
private List<General> innerGenerals;
public GeneralAdapter(Context context, List<General> innerGenerals) {//这里用构造器的方式传递外部类的上下文对象和General集合对象
super();
this.context = context;
this.innerGenerals = innerGenerals;
}

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





@Override
public General getItem(int position) {
// TODO Auto-generated method stub
return generals.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
Log.i("main", position+"");
ViewHolder viewHolder = null;

if(convertView == null){//第一屏中尚未创建列表项时
viewHolder = new ViewHolder ();
convertView = View.inflate(context, R.layout.general, null);
viewHolder.ivGerneral = (ImageView) convertView.findViewById(R.id.ivThumb);
viewHolder.tvName = (TextView)convertView.findViewById(R.id.tvName);
convertView.setTag(viewHolder);//这里相当于初始化一次用于适配的布局,以后都用这个布局了,就是滚动的时候就不用再初始化用于适配的布局
}else{//以后的滚动,出现其他的列表项
viewHolder = (ViewHolder) convertView.getTag();
}
General general = this.innerGenerals.get(position);
viewHolder.ivGerneral.setImageResource(general.getImageSrc());
viewHolder.tvName.setText(general.getName());
return convertView;
}

}
class ViewHolder{//用于适配布局的具体项
ImageView ivGerneral;
TextView tvName;
}


}

适配的页面布局:general.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" >

<ImageView
android:id="@+id/ivThumb"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/baiqi"/>
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="白起"
/>
</LinearLayout>

General.java:

package com.litsoft.General;


public class General {
private int imageSrc;
private String name;
public int getImageSrc() {
return imageSrc;
}
public void setImageSrc(int imageSrc) {
this.imageSrc = imageSrc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public General(int imageSrc, String name) {
super();
this.imageSrc = imageSrc;
this.name = name;
}

}

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>


<string name="app_name">Day_05_06</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string-array name="generals">
<item>白起</item>
<item>曹操</item>
<item>成吉思汗</item>
<item>韩信</item>
<item>李世民</item>
<item>努尔哈赤</item>
<item>孙膑</item>
<item>孙武</item>
<item>朱元璋</item>
<item>岳飞</item>
</string-array>
</resources>

效果:


 

分享到:
评论

相关推荐

    Android双缓存机制

    listview、gridview加载图片错文问题

    Android Listview 滑动过程中提示图片重复错乱的原因及解决方法

    主要分析Android中Listview滚动过程造成的图片显示重复、错乱、闪烁的原因及解决方法,顺便跟进Listview的缓存机制。 1、原因分析 Listview item 缓存机制:为了使得性能更优,Listview会缓存行item(某行对应的...

    Android 图片缓存机制的深入理解

    Android 图片缓存机制的深入理解 Android加载一张图片到用户界面是很简单的,但是当一次加载多张图片时,情况就变得复杂起来。很多情况下(像ListView、GridView或ViewPager等组件),屏幕上已显示的图片和即将滑动...

    android listview viewholder

    我们在使用ListView的时候,经常会使用的ViewHolder方式作为缓存,每次都需要手动的通过viewholder.icon = convertview.findVIewByid(id);一般的app都会有好几个页面会用到ListView,这样的话我们的代码量就会很大,...

    Android应用—— 花界

    (1). 工程运用Android Library (2). 通用主框架搭建 ... 缓存机制 (7). 异步图片加载 (8). 统计(暂且使用友盟) (9). 广告(暂且使用有米) (10). 在线支付(集成支付宝) (11). 异步图片加载 (12).其他 原文地址: ...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    12.2 Android中的缓存策略 417 12.2.1 LruCache 418 12.2.2 DiskLruCache 419 12.2.3 ImageLoader的实现 424 12.3 ImageLoader的使用 441 12.3.1 照片墙效果 441 12.3.2 优化列表的卡顿现象 446 第13章 综合...

    Java最全面试题宝典.rar

    Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 ...Android ORM 框架之 greenDAO 使用心得 Data Binding(数据绑定)用户指南

    Android分页获取sqlite数据

    适合初学者 知识点: 1、listView分页加载 2、利用SparseArray实现ViewHolder的缓存 3、java反射机制读取sqlite查询结果 4、sqlite数据库分页读取 5、文件拷贝操作

    最全java面试题.zip

    ##第一部分: Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ...Android ORM 框架之 greenDAO 使用心得 Data Binding(数

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 |--android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED |...

    Android开发艺术探索

     12.2 Android中的缓存策略 / 417  12.2.1 LruCache / 418  12.2.2 DiskLruCache / 419  12.2.3 ImageLoader的实现 / 424  12.3 ImageLoader的使用 / 441  12.3.1 照片墙效果 / 441  12.3.2 优化列表的卡顿...

    android手机安全卫士

    1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现...

    Android代码-ProviderAdapter

    ProviderAdapter 模板化开发 ...此写法无任何xml,无任何inflate操作,并且添加了缓存机制,尽可能的减小了内存消耗 四、项目效果图 License Copyright [2018] [Victory-Over] Licensed under the

    MemoryClean源代码

    root授权及检测,多线程,缓存机制,listView中有图片加载

    Android中的Bitmap缓存池使用详解

    在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片)。 在这些控件中,当一个子控件不显示的时候,系统会重用...

    Android代码-看知乎安卓App

    采用了三级图片缓存(文件、软引用,LRU),并解决图片错位等问题,仅需调用CacheTool的cacheImage即可; 对Adapter进行了抽象,开发更有效率; 使用了Android自带的下拉刷新SwipeRefreshLayout; 使用了Android5.0...

    android 网络应用轻量框架-多线程管理-高效缓存-设计模式

    5:先执行缓存数据后执行请求数据 (缓存性能) 6:使用状态模式 观察者模式更好的处理多线程 最初的想法:网络优化开发框架 (移除任务未完成) 网络稳定,系统运行稳定性,大内存消耗稳定,长时间运行稳定性 ...

    Android仿QQ空间动态界面分享功能

    缓存机制使得数据可在启动界面后瞬间加载完成。 动态详情界面MomentActivity支持 (取消)点赞、(删除)评论、点击姓名跳到个人详情 等。 只有1张图片时图片放大显示,超过1张则按九宫格显示。 用到的...

Global site tag (gtag.js) - Google Analytics