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. 访问WEB-INF目录中的JSP文件

    方法1:本来WEB-INF中的jsp就是无法通过地址栏访问的.所以安全.如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置servlet格式差不多的配置就ok了.如下: 访问 ...

  2. Path类型的扩展方法 z

    写了一个基于System.IO.Path类型方法的扩展类型,用于快速对文件系统路径进行操作.如下图: 其中有许多方法就是直接调用Path类型的静态方法.比如AppendPath方法内部会直接调用Pat ...

  3. HDU4612 Warm up 边双(重边)缩点+树的直径

    题意:一个连通无向图,问你增加一条边后,让原图桥边最少 分析:先边双缩点,因为连通,所以消环变树,每一个树边都是桥,现在让你增加一条边,让桥变少(即形成环) 所以我们选择一条树上最长的路径,连接两端, ...

  4. 转:maven项目添加jar包.

    很多新手都不知道如何在maven项目里添加jar包. 以前我还没接触maven的时候下载过一个demo,是maven项目. 我居然是照着他的pom.xml文件一个一个的写!!! 很多人认为理所当然的东 ...

  5. OpenGL 加载位图(BMP)贴图

    GLuint Texture[1]; HBITMAP hBMP; BITMAP BMP; glGenTextures(1, &Texture[0]); hBMP = (HBITMAP)Load ...

  6. 企业移动互联网O2O微信支付流程图

    过去一周里最受关注的应该就是微信了,腾讯合作伙伴大会微信分论坛的火爆现场,没有亲临其境是无法想象的,近3000人报名,2000多人来到现场,试图进入只能容纳300人的会场…… 闲话不表,进入正题吧,本 ...

  7. HTML-css selector

    Css selector 基本有三种 HTML(TAG)selector , ID selector , Class selector css selector 综合使用 : 重用,子选择器,组选择器 ...

  8. [NOI2005]维修数列 Splay tree 区间反转,修改,求和,求最值

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1500 Description Input 输入文件的第1行包含两个数N和M,N表示初始时数 ...

  9. Java网络编程(UDP协议-聊天程序)

    接收端: package WebProgramingDemo; import java.net.DatagramPacket; import java.net.DatagramSocket; publ ...

  10. hdoj 4325 Flowers【线段树+离散化】

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...