BaseAdapter自定义适配器——思路详解

引言:

Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。

由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。

实现效果:

实现过程:

  1. 重写视图区域:

    即重写BaseAdapter

有四方要重写:

public int getCount()

数据域大小方法

public Object getItem(int arg0)

返回每个Item的数据据

public long getItemId(int arg0)

返回每个Item的ID

View getView(int arg0, View arg1, ViewGroup arg2)

最重要的是:重绘视图,调用次数是由第一个方法确定的。最后将视图返回。

注意:有些控件必须设置成没有获利焦点与点击。

这几个方法写的内容基本不变,具有参考价值。

2.重写数据区域使用ArrayList实现List。

先封装一个数据类,再将这个数据类装进List集合中。

这两个集合是很重要的,开发中是很常用的。但是《疯狂Java讲义》中讲的很少,但讲的很全。

3.绑定数据区域与视图区域

setListAdapter(MyAdapter);

注:MyAdapter是自定义的Adapter。

代码实现:

JAVA代码:

MainActivity.java、MyAdapter.java、User.java、UserManger.java中

 package com.example.baseadapteriwrite;

 import java.util.ArrayList;

 import android.os.Bundle;

 import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.view.Menu;
import android.widget.ListView; public class MainActivity extends ListActivity { private ArrayList<User> mList=null;
private Context context=null;
private ListView listView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
listView=this.getListView();
mList=(ArrayList<User>) UserManger.getUserList();
MyAdapter adapter = new MyAdapter(context, mList); setListAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
 import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MyAdapter extends BaseAdapter {
private List<User> list = null;
private Context context = null; public MyAdapter(Context context, List<User> list) {
this.list=list;
this.context = context;
} @Override
public int getCount() {
// TODO Auto-generated method stub
// 多少 个数据
return list.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
TextView text1=null,text2=null;
if(arg1==null)
{
LayoutInflater inflater = LayoutInflater.from(context);
arg1 = inflater.inflate(R.layout.activity_main,null);
}
text1=(TextView) arg1.findViewById(R.id.textView1);
text2=(TextView) arg1.findViewById(R.id.textView2);
text1.setText(list.get(arg0).getmName());
text2.setText(list.get(arg0).getmAge());
return arg1;
}
}
 public class User
{
private String mName=null;
private String mAge=null; public User(String name,String age)
{
this.mName=name;
this.mAge =age;
} public String getmName() {
return mName;
} public void setmName(String mName) {
this.mName = mName;
} public String getmAge() {
return mAge;
} public void setmAge(String mAge) {
this.mAge = mAge;
}
}
 import java.util.ArrayList;
import java.util.List; public class UserManger { public static List<User> getUserList()
{
List<User> list=new ArrayList<User>();
for(int i = ;i<;++i)
{
User user=new User("MM"+i,""+i);
list.add(user);
}
return list;
} }

XML代码:

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="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
 

BaseAdapter自定义适配器——思路详解的更多相关文章

  1. 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...

  2. ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...

  3. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  4. [转]Vue项目全局配置微信分享思路详解

    这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...

  5. python编写微信公众号首图思路详解

    前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...

  6. 【转】ANDROID自定义视图——onLayout源码 流程 思路详解

    转载(http://blog.csdn.net/a396901990) 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局 ...

  7. Hash 哈希表和算法思路详解

    概述 哈希表是一种可以满足快速查找数据结构,时间复杂度接近O(1). 哈希函数是无限集到有限集的映射. 处理数据量大,查找效率要求高时推荐使用hash容器. 问题: 什么情况下考虑使用哈希容器? 常用 ...

  8. 在Tomcat中配置404自定义错误页面详解

    这篇文章主要介绍了在Tomcat中配置404自定义错误页面全解,需要的朋友可以参考下 一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这 ...

  9. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

随机推荐

  1. build/core/base_rules.mk:195: already define

    编译错误: build/core/base_rules.mk:195: *** packages/apps/ScanDemo: MODULE.TARGET.APPS.ScanDemo already ...

  2. 小结OC中Retain cycle(循环引用)

    retain cycle 的产生 说到retain cycle,首先要提一下Objective-C的内存管理机制. 作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于 ...

  3. spring 学习2

    package com.asm; //...省略导入的相关类 public class MessageController implements Controller { public ModelAn ...

  4. spring xml记录

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  5. [Qt] qtcreator 中打开console

    (1) qtcreator-->左侧Projects-->Run-->中间的checkbox (Run in terminal)打上勾 (2) 在项目的.pro文件中加上 " ...

  6. js 截取字符串

    转:http://blog.csdn.net/dotnet25/article/details/8331959 字符串:var s = "1,2,3,4,5," 目标:删除最后一个 ...

  7. Eclipse设置保存时自动给变量加final

    也是针对checkstyle的,在代码检查规范时,所有的变量必须是final.为了解决这个问题,通过以下的设置可以在eclipse保存时,自动给没有加final的变量加上final. Window-& ...

  8. Android两种 旋转Bitmap方法

    方法1. 利用Bitmap.createBitmap Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {      ...

  9. mysql数据库的高可用方法总结

    高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一 些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无 ...

  10. CentOS下配置SMTP

    在服务器上配置一个SMTP邮件服务可能是在日常工作中经常会遇到的需要,比如在做一些简单测试的时候. 配置步骤无比简单,废话不说: 1,yum -y install mail 2,编辑/etc/mail ...