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的更多相关文章
随机推荐
- gdi写的2048
//-------------------------------------------[头文件及引用]----------------------------------------------- ...
- Dos操作
\tree/f >c.txt \dir/s/b >c.txt
- jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码
jquery单行滚动.批量多行滚动.文字图片翻屏滚动效果代码,需要的朋友可以参考下. 以下代码,运行后,需要刷新下,才能加载jquery,要不然看不到效果.一.单行滚动效果 <!DOCTYPE ...
- 无状态、REST、RESTful 和 Web Services【整理】
在理解 OpenStack 的过程中,常常遇到 REST 这个概念,现从各处搜罗如下: 对 Web Service 的理解: Web 服务有点像对计算机友好的网页,基于让程序可以跨网络交换信息的标准和 ...
- 词汇小助手V3.0发布了——不只是一个查单词的软件
欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...
- CSS换行:word-wrap、word-break和text-wrap区别
一.word-wrap:允许对长的不可分割的单词进行分割并换行到下一行.(中英文处理效果一样) word-wrap有两个取值: 1.word-wrap: normal:只在允许的断字点换行(浏览器保持 ...
- 50道经典的JAVA编程题(26-30)
50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一 ...
- 2014-02-27WPF学习笔记
//StackPanel布局 //创建时间:11:33 页面布局:Orientation默认纵向:Vertical水平为:Horizontal <Button> <Button.Co ...
- 如何把匿名类型.GetType()返回的对象传进泛型里面[转]
//怎么取得匿名类型的Type放到 //泛型T当中?? var 匿名 = new { A = 0, B = 1 }; Type t = 匿名.GetType(); //然后下面 var xx = db ...
- Java网络编程(TCP协议-练习-上传文本文件)
客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...