BaseAdapter自定义适配器——思路详解
BaseAdapter自定义适配器——思路详解
引言:
Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。
由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。
实现效果:
实现过程:
- 重写视图区域:
即重写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自定义适配器——思路详解的更多相关文章
- 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- [转]Vue项目全局配置微信分享思路详解
这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
- 【转】ANDROID自定义视图——onLayout源码 流程 思路详解
转载(http://blog.csdn.net/a396901990) 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局 ...
- Hash 哈希表和算法思路详解
概述 哈希表是一种可以满足快速查找数据结构,时间复杂度接近O(1). 哈希函数是无限集到有限集的映射. 处理数据量大,查找效率要求高时推荐使用hash容器. 问题: 什么情况下考虑使用哈希容器? 常用 ...
- 在Tomcat中配置404自定义错误页面详解
这篇文章主要介绍了在Tomcat中配置404自定义错误页面全解,需要的朋友可以参考下 一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这 ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
随机推荐
- 获取程序中无需释放的ViewController
AppDelegate.h @property (strong, nonatomic) UIViewController *viewController; 在需要用的地方 #define appDel ...
- Showing 2 changed files with 3 additions and 3 deletions.
4 lib/matplotlib/__init__.py View @@ -126,9 +126,9 @@ def compare_versions(a, b): else: ...
- ruby gems安装镜像
由于每一个月都要升级两台gitlab server, ruby安装的源老是被墙,痛苦无比. 所以须要使用国内的镜像 在/home/git/gitlab/Gemfile文件里第一行改动为: # sour ...
- Verilog之i2c合约
说明:i2c乔布斯.有这么多的事情在网上参考. 时刻:2014年5一个月6周二星期 1.问题叙述性说明: 正如图.已知的时钟clk为100k,rst为复位信号.上升沿有效,基于Verilog HDL或 ...
- Linux - Eclipse CDT + GCC 安装(2014.10.2)
Eclipse CDT + GCC 安装 (2014.10.2) 本文地址:http://blog.csdn.net/caroline_wendy 1. 安装Eclipse,在官方站点下载Eclips ...
- LF will be replaced by CRLF问题解决方法
[GIT] warning: LF will be replaced by CRLF问题解决方法 开发环境: 操作系统: windows xp ruby 1.9.2 rails 3.1.3 git v ...
- [小技巧] Python 脚本暴力破解 HC2600 机顶盒管理密码
家里最近接入了广电有线电视,配了三个创维 HC2600 机顶盒,并且每个机顶盒还带有无线路由器功能. 免费赠送 Internet 接入服务倒也没什么,不过机顶盒内置的 WIFI 实在有点寒酸:只支持 ...
- Asp.net +Jquery-uploadify多文件上传
页面代码如下: <link href="JS/jquery.uploadify/uploadify.css" rel="stylesheet" type= ...
- Python-elementTree方法解析xml文件-01
[XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据.概念一: <foo> # foo元素的起始标签 ...
- R语言——包的添加和使用
R是开源的软件工具,很多R语言用户和爱好者都会扩展R的功能模块,我们把这些模块称为包.我们可以通过下载安装这些已经写好的包来完成我们需要的任务工作. 包下载地址:https://cran.r-proj ...