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的更多相关文章

随机推荐

  1. 文件I/O操作(1)

    linux系统调用和用户编程接口(api) 系统调用是指在操作系统提供给用户程序调用的一组“特殊”的接口,用户程序可以通过这组特殊的接口来获取操作系统内核提供的服务,例如用户可以通过进程控制相关的系统 ...

  2. Nexus 5 Android 6.0.1刷机、Root

    Nexus 5 Android 6.0.1刷机.Root 2016-01-24   一.     准备 1.      备份通讯录等数据,切记. 2.      准备adb .fastboot.网上搜 ...

  3. Ubuntu 小技巧

    一.获得当前文件夹的路径: 在目标文件夹下,按Ctrl+l此文件的路径会被选中 之后Ctrl+c复制.要复制到终端(Terminal),选中终端按鼠标的滚轮就粘贴到了Terminal命令行中了. 二. ...

  4. python的动态与解释

    python是一门动态解释型语言.为了理解"动态"和"解释",前几天都在看<Python源码剖析>,以下是自己的一些总结. 先说解释,除开py2ex ...

  5. 【FOI】异或问题

    题意: 给出n个数ai 和m个操作 操作有两种 C x y:将ax的值改为y Q x:求几种方案使得 b1^b2^...^bn=x(ai>=bi) 题解: 先推荐一个不错的题解 题目差不多 我之 ...

  6. SGU223 - Little Kings(状态压缩DP)

    题目大意 给定一个N*N(n<=10,k<=n*n)大小的棋盘,要求你在棋盘上放置k个国王,使得不会相互攻击,如果棋盘上某个格子放置了一个国王,那么与他相邻的八个格子都是他的攻击范围,问有 ...

  7. 创建本地CM 离线服务器

    一.包管理工具及CentOS的yum 1.包管理工具如何发现可以用的包 包管理工具依赖一系列软件源,工具下载源的信息存储在配置文件中,其位置随某包管理工具不同而变化 使用yum的RedHat/Cent ...

  8. 如何利用多核CPU来加速你的Linux命令

    原文出处: rankfocus   译文出处: 外刊IT评论 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能 ...

  9. mysql 查询多个id

    select * from b1 where find_in_set('4',id); select * from b1 where id in (1,2,3,22);

  10. (二)Bootstrap CSS 概览

    在这一章中,我们将讲解 Bootstrap 底层结构的关键部分,包括我们让 web 开发变得更好.更快.更强壮的最佳实践. HTML 5 文档类型(Doctype) Bootstrap 使用了一些 H ...