android 适配器的简易笔记

(一)、使用ArrayAdapter做适配器:

常用在:Spinner

①设置数据源

②使用ArrayAdapter做适配器,使用方法同Spinner

③ 给ListView对象设置适配器

String[] arrayData = { "网络设置", "wifi设置", "蓝牙设置", "网络设置2", "wifi设置2","蓝牙设置2", "网络设置3", "wifi设置3", "蓝牙设置3" };

ArrayAdapter<String> adapter = new ArrayAdapter<String>(

上下文对象:       MainActivity.this,

布局地址 :         android.R.layout.xxx.theme;

数据源:             arrayData);

listView_main_userList.setAdapter(adapter);

listview中每一条item被点击的监听事件

listView_main_userList

.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

Object object = parent.getItemAtPosition(position);

System.out.println("==您选择了:==>" + object.toString());

}

});

(二)、使用SimpleAdapter做适配器:

常用在ListView

常用List<Map<String, Object>>接收数据

上下文对象:                      MainActivity.this,                     context

数据源:                             List<Map<String, Object>>        data

布局地址 :                        R.layout.xxx.theme;                       resourse

Map的key[]:                    new String[]{""}                            from

value放在item的位置         new int[]{R.id.xxx}                        to

数据源

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

for (int i = 0; i < 10; i++) {

Map<String, Object> map = new HashMap<String, Object>();

map.put("username", "wxj_" + i);

map.put("password", "123456_" + i);

map.put("email", "[email protected]_" + i);

list.add(map);

}

SimpleAdapter adapter = new SimpleAdapter(

MainActivity.this,

list,

R.layout.listview_main_userlist,

new String[] { "username" },

new int[] {R.id.text_main_username});

listView_main_userlist.setAdapter(adapter);

// 给ListView增加事件监听器。使用OnItemClickListener来监听ListView中每一个Item。

// 可以通过这个监听器,得到被点击的每个item中的内容(该内容其实就是一个map对象)。

listView_main_userlist

.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

// 借助parent中的getItemAtPosition()方法,传进一个位置参数,

// 就能获取到被点击的那个item的对象。该对象其实就是当初加入适配器中的map对象。

Object object = parent.getItemAtPosition(position);

System.out.println("==您点击了:==>" + object.toString());

}

});

(三)、自定义Adapter :BaseAdapter

常用在:给ListView或GridView设置适配器对象。

class MyAdapter extends BaseAdapter {

public int getCount() {

return imageId.length;

}

public Object getItem(int position) {

return imageId[position];

}

public long getItemId(int position) {

return position;

}

public View getView(int position, View convertView, ViewGroup parent) {

ImageView imageView = null;

//convertView属于移出到屏幕外的容器

如果convertView被装载,证明将加载新数据,所以可以利用这个容器

if (convertView != null) {

imageView = (ImageView) convertView;}

else{

imageView = new ImageView(MainActivity.this);

}

// setImageResource()方法是设置ImageView对象中的图片

imageView.setImageResource(imageId[position]);

return imageView;

}

(四),较复杂的自定义适配器:

1、新的类:(布局填充器对象)

①    LayoutInflater:

from(Context context)

Obtains the LayoutInflater from the given context.

作用是:从当前上下文环境中获得一个布局填充器对象;

View   inflate(int resource, ViewGroup root)

Inflate a new view hierarchy from the specified xml resource.

作用是:通过填充一个特定的xml布局文件,形成一个view对象。

②   重写getView()方法。

public View getView(int position, View convertView, ViewGroup parent) {

方法一:

当ListView或GridView中每个item的布局很简单,则无需为item写布局文件

ImageView imageView = null;

if (convertView == null) {

imageView = new ImageView(MainActivity.this);

} else {

imageView = (ImageView) convertView;

}

imageView.setImageResource(imageId[position]);

return imageView;

方法二:

当每个item的布局较复杂的时候,借助LayoutInflater来填充布局文件。

View view = null;

if (convertView == null) {

LayoutInflater是依靠from方法产生的

LayoutInflater mInflater = LayoutInflater.from(context);

调用布局填充器的填充方法,将自定义的item布局文件填充成view对象。

view = mInflater.inflate(R.layout.item_listview_main, null);

依次将item中的控件find出来。注意此时findViewById的对象不是activity对象,

而是每个item中的view对象。因此要view.findViewById()

text_item_username = (TextView) view.findViewById(R.id.textView_item_username);

text_item_password = (TextView) view.findViewById(R.id.textView_item_password);

imageView_item_headpic = (ImageView) view.findViewById(R.id.imageView_item_headpic);

} else {

将移出到屏幕外的view再次利用,也就是充分重复利用convertView

view = convertView;

}

从数据源中一一获取到每个item控件中应该赋予的数值

String username = (String) list.get(position).get("username");

String password = (String) list.get(position).get("password");

int id = imageId[position];

给item中每个控件一一赋值

text_item_username.setText(username);

text_item_password.setText(password);

imageView_item_headpic.setImageResource(id);

return view;

方法三:

当每个item的布局较复杂的时候,借助LayoutInflater来填充布局文件。

利用ViewHolder来包装每个item中的控件。

该方法要再写一个内部类,习惯性大家将其命名为ViewHolder:

class ViewHolder {

public TextView text_item_username;

public TextView text_item_password;

public ImageView imageView_item_headpic;

}

ViewHolder holder = null;

if (convertView == null) {

holder = new ViewHolder();

LayoutInflater mInflater = LayoutInflater.from(context);

convertView = mInflater.inflate(R.layout.item_listview_main, null);

holder.imageView_item_headpic = (ImageView) convertView .findViewById(R.id.imageView_item_headpic);

holder.text_item_password = (TextView) convertView.findViewById(R.id.textView_item_password);

holder.text_item_username = (TextView) convertView.findViewById(R.id.textView_item_username);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

String username = (String) list.get(position).get("username");

String password = (String) list.get(position).get("password");

int id = imageId[position];

holder.imageView_item_headpic.setImageResource(id);

holder.text_item_username.setText(username);

holder.text_item_password.setText(password);

return convertView;

}

虽然第三种方法有些复杂,但是第二种方法中有个漏洞,

时间: 2024-11-09 05:43:54

android 适配器的简易笔记的相关文章

Android菜鸟的成长笔记(27)——ViewPager的使用

ViewPager是Android 3.0以上可以使用的API. 一.ViewPager能干什么? 1.微信5.0中连带滑动用ViewPager可以轻松实现. 2.实现类似于新浪微博的导航引导界面. 3.实现其他导航或菜单. 二.ViewPager的使用 1.添加布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pa

Android V7包学习笔记更新中.....

关于V4 V7 V13 VX包介绍转自这里 1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有support库? 如果在低版本Android平台上开发一个应用程序,而应用程序又想使用高版本才拥有的功能,就需要使用Support库. 3, 三个Support 库的区别和作用是什么? Android Support v4 是最早(2011年4月份)实现的库.用在Android1.6 (API lever 4)或者更高版本之

.Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK

今天下载了一份原来来参考,却发现SDK版本偏低我没有安装 用SDK Manager却一直更新不了出现 Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl.google.com refusedFailed to fetch URL http://dl-ssl.google.com/android/reposito

Android老罗视频笔记-http-1

---恢复内容开始--- 以下是看老罗视频的笔记: (所有图片来自老罗视频的截图) 一.老罗视频教程思路:android入门介绍-->百度地图介绍-->常用UI布局的介绍-->常用的UI的控件.(应用开发控件:HTTP协议编程了解服务器与安卓之间的交互.) 二.WWW是以Internet作为传输媒介的一个应用程序,WWW网上基本的传输单位是Web网页.B-S结构.WWW的工作是基于客户机/服务器计算模型(j2ee).由Web浏览器和Web服务器构成,两者之间采用超文本传输协议HTTP进行

Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持

在Google官方Android设计指南中(链接:http://www.apkbus.com/design/get-started/ui-overview.html)有一个新特性就是自我标识,也就是宣传自己,所以很多应用现在也自然的使用ActionBar并提供自己的logo. 微信的应用: Google的Android设计指南中是这样说的:应用的 启动图标 作为启动应用的入口是展示 logo 的最佳场所.你也可以将启动图标放置在 操作栏 上,从而保证在应用内的所有页面上都能看到它. 在使用Act

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

android 适配器simpleadapter和baseadapter区别

android 适配器 simpleadapter 和 baseadapter 设计网络程序或者数据处理显示程序的时候,常常会使用 simpleadapter 和baseadapter 来实现. adapter 是适配器模式,是数据和界面之间的桥梁.baseadapter 是一个抽象的类,要使用必需为其定义子类并实现相关方法.simpleadapter 派生于 baseadapter ,已经实现了相关的方法,所以可以直接使用.二者在使用效果上没有太大的区别,两者可以设计出几乎一模一样的界面.但在

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

android第四周作业笔记

第四周作业要求如下 .....看了一下作业要求后,然后做了几周后.....老师....你这是玩我是吧?!你绝壁在玩我?! 算了,多说无益,来看看我们江大婶的做法吧 首先是MainActivity.java package cn.edu.shu.cs.android.experiment04; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import and