Android_listView_BaseAdapter
layout.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=".MainActivity" > <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
></ListView>
</RelativeLayout>
layout_item.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/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
main.java
package com.example.day08_listview_baseadapter03_convertview; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* 1.滚动控件
1.ScrollView表示可以垂直方向滚动的控件
2.HorizontalScrollView表示的是水平方向滚动的控件
3. android:scrollbars="none"设置是否有滚动bar
4.滚动控件之间可以嵌套
*5.滚动控件只能有一个子控件 2.listview 列表控件 --适配器控件
1.能展示具有相同的数据类型,相似的ui显示的多组数据
2.适配器将数据转换成列表能够显示视图
3.数据源可以是entrys,数组,集合
3.适配器填充数据
1.arrayadapter
1.只能填充文本内容
2.只能填充一个文本
2.simpleadapter
1.可以自定义item布局,里面可以包含图片,文本,button,checkbox等..
2.可以设置多样的数据 3.设置数据不方便 4.自定义适配器去完成复杂样式的布局view --- baseadapter
1.baseadapter是抽象类,需要继承
2.实现未实现的方法
3.设置适配器
* @author my
*
*/
public class MainActivity extends Activity { private ListView lv;
private List<Map<String,Object>> list; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView);
list = new ArrayList<Map<String,Object>>();
int[] image = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
Map<String,Object>map ;
for (int i = 0; i < image.length; i++) {
map = new HashMap<String, Object>();
map.put("name", "杭州"+i);
map.put("image", image[i]);
list.add(map);
}
MyAdapter myAdapter = new MyAdapter();
lv.setAdapter(myAdapter);
}
class MyAdapter extends BaseAdapter{
/**
* 必须实现,决定适配器空间的item的数量
* 通常返回数据源的长度,当返回0时,没有显示
*/
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
/**
* position表示的是item对应的索引
* 通常根据索引来获得对应的数据,并返回
* 不是必须实现
*
*/
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
/**
* position表示的是item对应的索引
* 通常返回position作为item的id
* 不是必须实现
*/
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} /**
* 用来确定一个item展示的视图view
* 返回的view就表示需要显示的一个item的view
* position表示的是当前显示的item的view所对应的索引
* convertView 可以复用的view
* parent 表示的是设置该适配器的适配器控件(listView)
*/
//布局的复用
/**
* 问题: getview在滑动的过程中,会重复多次执行
1.会多次将布局文件转换成view(需要读取xml文件和解析),而这个方法是耗时,消耗资源的方法
2.会多次遍历view去找控件,会消耗时间和资源
解决:convertView表示的是可以复用view
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
ViewHolder viewHolder ;
//第一次调用
if(view==null){
//加载布局
view = View.inflate(MainActivity.this, R.layout.layout_item, null);
viewHolder = new ViewHolder();
//实例化控件(因为是在当前布局中查找控件,所以必须使用view调用findViewById())
viewHolder.text = (TextView) view.findViewById(R.id.text);
viewHolder.image = (ImageView)view.findViewById(R.id.image);
//设置标记
view.setTag(viewHolder);
}else{
//得到标记获得viewHolder对象
viewHolder = (ViewHolder) view.getTag(); }
//获得该索引位置的map集合
Map<String,Object>map = list.get(position);
//为适配器控件的每一条view设置数据
viewHolder.text.setText((String)map.get("name"));
viewHolder.image.setImageResource((Integer)map.get("image"));
return view;
} }
//自定义类(一般都使用ViewHolder类来存view控件)
class ViewHolder{
private TextView text;
private ImageView image;
} }
Android_listView_BaseAdapter的更多相关文章
随机推荐
- 基于kryonet的RPC,使用kryo进行序列化
Kryo是一个序列化框架. Kryonet是一个基于kryo的RPC框架,它实现了一套高效简洁的API,它通过NIO实现了TCP和UDP通讯,目前还不支持Http. 自己写了一个测试代码,运行了下,感 ...
- Flash 导出图片和声音
命令文件 PolarBear_jsfl.zip Flash Professional 编辑器命令,用来导出 flash 库中的图片和声音 使用步骤: 1. 首先下载 PolarBear_jsfl.zi ...
- LeetCode题解——Longest Substring Without Repeating Characters
题目: 给定一个字符串,返回其中不包含重复字符的最长子串长度. 解法: 维持两个指针,第一个指向子串开始,第二个负责遍历,当遍历到的字符出现在子串内时,应计算当前子串长度,并更新最长值:然后第一个指针 ...
- Nexus 5 Android 6.0.1刷机、Root
Nexus 5 Android 6.0.1刷机.Root 2016-01-24 一. 准备 1. 备份通讯录等数据,切记. 2. 准备adb .fastboot.网上搜 ...
- input子系统 KeyPad-Touch上报数据格式与机制
-----------------------------------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://b ...
- Sublime Text 2结合VS2010配置C C++编译
本文参考以下文章 特此谢谢 http://www.cnblogs.com/akira90/archive/2013/01/02/2842571.html 因遇到错误,浪费一个小时才解决 一.利用VS2 ...
- BroadcastReceiver学习笔记
1.在代码中注册与在AndroiManifest.xml注册的区别 (a)在代码中注册可以控制注册与注销的时间.比如在onCreate-onDestory, onStart-onStop, onRes ...
- [OC Foundation框架 - 19] 练习遇到的Bugs
1.没有权限读取文件夹 The file “Homework2” couldn’t be opened because you don’t have permission to view it. ...
- fastica matlab 转载
FastICA工具箱1 http://chunqiu.blog.ustc.edu.cn/?p=68#comment-3512 FastICA代码网址如下:http://research.ics.aal ...
- Dev 等待提示 WaitDialogForm 升级版
本文转载:http://www.cnblogs.com/VincentLuo/archive/2011/12/24/2298916.html 一.Dev的等待提示框 ...