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的更多相关文章
随机推荐
- 不要62(HDU 2089数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...
- HDU 5536 Chip Factory 字典树+贪心
给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...
- Anti-Grain Geometry 概述
AGG是一个轻量.灵活.可靠的图形算法库,AGG各部分之间是松耦合的,也即是说各部分可以单独使用. The primary goal of Anti-Grain Geometry is to brea ...
- 【暑假】[深入动态规划]UVa 1627 Team them up!
UVa 1627 Team them up! 题目: Team them up! Time Limit: 3000MS Memory Limit: Unknown 64bit IO Forma ...
- 7.OpenACC
OpenACC: openacc 可以用于fortran, c 和 c++程序,可以运行在CPU或者GPU设备. openacc的代码就是在原有的C语言基础上进行修改,通过添加:compiler di ...
- 【转】开源C/C++网络库比较
在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO. ACE是一 ...
- InetAddress
InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service ...
- 13个不容错过的Java项目
今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎 ...
- mssql存储过程demo
ALTER PROCEDURE [dbo].[sp_get_saleData]ASBEGIN set nocount on -- 获取最近上传数据的时间戳 declare @dd datetime s ...
- 转载 C#匿名函数 委托和Lambda表达式
转载原出处: http://blog.csdn.net/honantic/article/details/46331875 匿名函数 匿名函数(Anonymous Function)是表示“内联”方法 ...