Android界面开发-Adapter

原创 2012年03月29日 22:42:29
普通的Android编程需要使用到工程目录下的res/layout目录,需要在这个目录下新建一个layout类型的xml文件,之后我们编辑这个xml,将各种控件的定义及设定信息写入文件,在Activity的onCreate中使用setContentView(R.lauout.xxx)来展示界面,这里的xxx就是你编写的xml。是不是感觉so easy?那么我们接着看。


如果你需要编写的是游戏程序,那么一般情况下可能你需要使用一个自定义的 view,你只要将setContentView的参数换成这个view的实例即可。在这个view的onDraw中完成绘制操作,应用需要通知这个view刷新界面的时候使用 invalidate或者postinvalidate完成。

如果你需要系统帮你实现缓冲机制,那么有一个实现了双缓冲的类SurfaceView可供你使用。

好吧,绘制的操作我们今后单独开章来将,我们今天讲一下怎么使用系统定义好的控件。



普通的TextView、EditText、Button等等这些控件我们不讲了,主要原因是太简单了。我们今天讲Adapter:

Adapter叫适配器,对于一个可以作为Container的Component来说,我们有时无法确定他内部所包含的Compoent个数和展现形式,我们仅能确定他得框架展现形式,所以需要一个Adapter。举例来说,对于一个ListView,我们仅能确定他的每一项肯定是一个一个的ListItem,但我们无法确定ListItem内部的内容如何展现,比如这个Item的宽高,有几个图片控件,几个文本控件。。。


我们使用Adapter来帮我们实现这一切。

  1. getCount帮我们确定了Item的总数;
  2. getItem确定取得每一项Item的方法;
  3. getItemId确定我们每一个Item的Id,不太用到,一般都是position;
  4. getView帮我们确定每一个Item的展现内容;

ok,有了这些,我们每一个item都知道怎么展现,又由于count这些也有了,我们知道如何将Item组合成一个大的Component,语言的设计之美就在这里了。。。


一个简单的例子如下:



PersonGridViewAdapter.java

package com.freesoft.uidemo.uicomponent;

import java.io.IOException;
import java.io.InputStream;

import com.freesoft.uidemo.R;
import com.freesoft.uidemo.entity.Person;
import com.freesoft.uidemo.entity.PersonList;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class PersonGridViewAdapter extends BaseAdapter {
	private Context context;
	private LayoutInflater inflater;

	public PersonGridViewAdapter(Context context) {
		super();
		this.context = context;
		inflater = LayoutInflater.from(context);
	}

	public int getCount() {
		return PersonList.getPersons().size();
	}

	public Object getItem(int position) {
		return PersonList.getPersons().get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = inflater.inflate(R.layout.gridview, null);

		ImageView img = (ImageView) convertView
				.findViewById(R.id.gv_gv_personpic);
		TextView txt = (TextView) convertView
				.findViewById(R.id.tv_gv_personname);

		Person person = PersonList.getPersons().get(position);

		AssetManager am = context.getAssets();
		InputStream is;
		try {
			is = am.open(person.getPersonIconUri().toString());
			img.setImageDrawable(Drawable.createFromStream(is, null));
			txt.setText(person.getPersonName());
		} catch (IOException e) {
			e.printStackTrace();
		}

		return convertView;
	}

}


Person.java

package com.freesoft.uidemo.entity;

import android.net.Uri;

public class Person {
	private String personName;
	private Uri personIconUri;
	public Person(String personName, String iconFilename) {
		super();
		this.setPersonName(personName);
		this.setPersonIconUri(Uri.parse(iconFilename));
	}
	
	private void setPersonName(String personName) {
		this.personName = personName;
	}
	private void setPersonIconUri(Uri personIconUri) {
		this.personIconUri = personIconUri;
	}
	
	public String getPersonName() {
		return personName;
	}
	public Uri getPersonIconUri() {
		return personIconUri;
	}
}


PersonList.java

package com.freesoft.uidemo.entity;

import java.util.ArrayList;

public class PersonList {
	private static ArrayList<Person> persons = null;
	
	public static ArrayList<Person> getPersons() {
		persons = new ArrayList<Person>();
		initPersons();		
		return persons;
	}
	private static void initPersons() {
		Person person = null;
		
		person = new Person("张三", "QQtxtb/QQtxtb 00.png");
		persons.add(person);
		
		person = new Person("李四", "QQtxtb/QQtxtb 01.png");
		persons.add(person);
		
		person = new Person("王五", "QQtxtb/QQtxtb 02.png");
		persons.add(person);
	}
}


简单的总结一下,发现使用了Adapter的控件还真不少,例如:ListView、GridView、AutoCompleteTextView、Gallery、Spinner等。。。。




Android 源码解析之Adapter和AdapterView与适配器模式

概述在Android中大量存在着适配器模式,其中的设计思路就是Adapter(提供数据)设在到AdapterView(展示数据集合的视图),其中Adapter体系结构如下而AdapterView有Li...
  • wbwjx
  • wbwjx
  • 2016年10月11日 23:55
  • 1645

Android 快速开发--万能的Adapter

1、概述 相信做Android开发的写得最多的就是ListView,GridView的适配器吧,记得以前开发一同事开发项目,一个项目下来基本就一直在写ListView的Adapter都快吐了~~~对...
  • linghu_java
  • linghu_java
  • 2015年03月05日 19:23
  • 8909

Android开发——告诉你Adapter应该写在Activity里面还是外面

0. 前言本文转载自AItsuki的博客。我先要说明一下我为什么要写这么一篇博客:最近看了一些其他人的项目,发现很多项目的做法是建立一个专门存放Adapter类的Package包,也有的项目干脆直接都...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年09月28日 19:38
  • 30331

Android adapter设计模式三:聊天界面

1.效果图: 2.说明: getViewTypeCount返回的就是种类数目了; getItemViewType根据当然Item的position决定返回不同的整型变量。然后在getView中,...
  • lovoo
  • lovoo
  • 2016年06月01日 15:39
  • 939

Android之Adapter用法总结

Android之Adapter用法总结 1.概念         Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(List Vie...
  • fznpcy
  • fznpcy
  • 2013年03月11日 10:23
  • 112345

android安卓开发设置adapter以后让界面显示设置的位置

文章说明:本文是页面里listview展示并设置了HeaderView和FooterView,设置adapter以后让界面显示自己设置的位置开始往下展示数据。在开发的时候碰到这样一个需求,在请求完某个...
  • bert_dong0626
  • bert_dong0626
  • 2017年01月07日 14:22
  • 918

Android基础入门教程——2.4.1 Adapter基础讲解

在开始学习Adapter之前我们要来了解下这个MVC模式概念: 举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计, 有人负责程序代码的编写如果要能够做到程序项目的分工就...
  • zpj779878443
  • zpj779878443
  • 2015年09月01日 14:44
  • 5058

一个adapter实现多个itemView

要想实现这个功能,有两个函数比较重要getItemViewType和getViewTypeCount 我先说明一下我的这个demo的功能。一共有两个按钮,一个用来添加字符串,一个用来添加图像。 先...
  • lxj1137800599
  • lxj1137800599
  • 2016年05月03日 18:49
  • 829

android开发--详解ListView,动态添加,删除Adapter中的数据项

ListView是Android开发中最常用到的控件之一,所以学习ListView显得非常重要,在本文中,作者继承了BaseAdapter实现了自己的Adapter,在其中实现相应的方法,包括添加,删...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2013年01月18日 19:54
  • 12375

Android教你如何一步步打造通用适配器

前言 在Android开发中ListView是最为常用的控件之一,基本每个应用都会涉及到它,要使用ListView列表展示,就不可避免地涉及到另外一个东西——Adapter,我们都知道,Adapte...
  • IT_ZJYANG
  • IT_ZJYANG
  • 2016年08月01日 00:00
  • 4067
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android界面开发-Adapter
举报原因:
原因补充:

(最多只允许输入30个字)