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>
效果:
相关推荐
listview、gridview加载图片错文问题
主要分析Android中Listview滚动过程造成的图片显示重复、错乱、闪烁的原因及解决方法,顺便跟进Listview的缓存机制。 1、原因分析 Listview item 缓存机制:为了使得性能更优,Listview会缓存行item(某行对应的...
Android 图片缓存机制的深入理解 Android加载一张图片到用户界面是很简单的,但是当一次加载多张图片时,情况就变得复杂起来。很多情况下(像ListView、GridView或ViewPager等组件),屏幕上已显示的图片和即将滑动...
我们在使用ListView的时候,经常会使用的ViewHolder方式作为缓存,每次都需要手动的通过viewholder.icon = convertview.findVIewByid(id);一般的app都会有好几个页面会用到ListView,这样的话我们的代码量就会很大,...
(1). 工程运用Android Library (2). 通用主框架搭建 ... 缓存机制 (7). 异步图片加载 (8). 统计(暂且使用友盟) (9). 广告(暂且使用有米) (10). 在线支付(集成支付宝) (11). 异步图片加载 (12).其他 原文地址: ...
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章 综合...
Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 ...Android ORM 框架之 greenDAO 使用心得 Data Binding(数据绑定)用户指南
适合初学者 知识点: 1、listView分页加载 2、利用SparseArray实现ViewHolder的缓存 3、java反射机制读取sqlite查询结果 4、sqlite数据库分页读取 5、文件拷贝操作
##第一部分: Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ...Android ORM 框架之 greenDAO 使用心得 Data Binding(数
|--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 |--android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED |...
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 优化列表的卡顿...
1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现...
ProviderAdapter 模板化开发 ...此写法无任何xml,无任何inflate操作,并且添加了缓存机制,尽可能的减小了内存消耗 四、项目效果图 License Copyright [2018] [Victory-Over] Licensed under the
root授权及检测,多线程,缓存机制,listView中有图片加载
在很多情况下(例如使用 ListView, GridView 或者 ViewPager控件),显示在屏幕上的图片以及即将显示在屏幕上的图片数量是非常大的(例如在图库中浏览大量图片)。 在这些控件中,当一个子控件不显示的时候,系统会重用...
采用了三级图片缓存(文件、软引用,LRU),并解决图片错位等问题,仅需调用CacheTool的cacheImage即可; 对Adapter进行了抽象,开发更有效率; 使用了Android自带的下拉刷新SwipeRefreshLayout; 使用了Android5.0...
5:先执行缓存数据后执行请求数据 (缓存性能) 6:使用状态模式 观察者模式更好的处理多线程 最初的想法:网络优化开发框架 (移除任务未完成) 网络稳定,系统运行稳定性,大内存消耗稳定,长时间运行稳定性 ...
缓存机制使得数据可在启动界面后瞬间加载完成。 动态详情界面MomentActivity支持 (取消)点赞、(删除)评论、点击姓名跳到个人详情 等。 只有1张图片时图片放大显示,超过1张则按九宫格显示。 用到的...