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的更多相关文章
随机推荐
- hbase分页查询
为了广大技术爱好者学习netty,在这里帮新浪微博@nettying宣传下他出版的新书 <netty权威指南>@nettying兄在华为NIO实践多年,这本书是他的技术和经验的一个结晶.N ...
- QTP、LoadRunner、QC工具下载地址
QTP10.0工具下载地址:http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=380454070&itemid ...
- 多线程与网络之NSURLConnection发送请求
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- LeetCode题解——Longest Substring Without Repeating Characters
题目: 给定一个字符串,返回其中不包含重复字符的最长子串长度. 解法: 维持两个指针,第一个指向子串开始,第二个负责遍历,当遍历到的字符出现在子串内时,应计算当前子串长度,并更新最长值:然后第一个指针 ...
- MFC消息映射机制
1.MFC应用框架主要类之间的关系 MFC自动生成的框架中重要的类有:C-App.CMainFrame.C-Doc和C-View. 其他的类如CClassView.CFileView等都是在框架窗口( ...
- uva 11275 3D Triangles
题意:三维空间中,给出两个三角形的左边,问是否相交. 面积法判断点在三角形内: #include<cstdio> #include<cmath> #include<cst ...
- poj2152 Fire
好难啊,我弱爆了. 题解看陈启峰的论文... /** * Problem:POJ2152 * Author:Shun Yao * Time:2013.9.2 * Result:Accepted * M ...
- HDU-2686 Matrix 多进程DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 经典的多进程DP,比较简单.f[x1][y1][x2][y2]表示起点到点(x1,y1)和(x2 ...
- 单节点伪分布集群(weekend110)的HBase子项目启动顺序
伪分布模式下,如(weekend110)hbase-env.sh配置文档中的HBASE_MANAGES_ZK的默认值是true,它表示HBase使用自身自带的Zookeeper实例.但是,该实例只能为 ...
- UIViewController生命周期测试
push进入 -[NaviRootVC viewWillDisappear:] -[NextVC viewWillAppear:] -[NextVC viewWillLayoutSubviews ...