layout.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10.  
  11. <ListView
  12. android:id="@+id/listView"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. ></ListView>
  16. </RelativeLayout>

layout_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:id="@+id/image"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. />
  11. <TextView
  12. android:id="@+id/text"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. />
  16. </LinearLayout>

main.java

  1. package com.example.day08_listview_baseadapter03_convertview;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import android.os.Bundle;
  9. import android.app.Activity;
  10. import android.view.Menu;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.widget.BaseAdapter;
  14. import android.widget.ImageView;
  15. import android.widget.ListView;
  16. import android.widget.TextView;
  17. /**
  18. * 1.滚动控件
  19. 1.ScrollView表示可以垂直方向滚动的控件
  20. 2.HorizontalScrollView表示的是水平方向滚动的控件
  21. 3. android:scrollbars="none"设置是否有滚动bar
  22. 4.滚动控件之间可以嵌套
  23. *5.滚动控件只能有一个子控件
  24.  
  25. 2.listview 列表控件 --适配器控件
  26. 1.能展示具有相同的数据类型,相似的ui显示的多组数据
  27. 2.适配器将数据转换成列表能够显示视图
  28. 3.数据源可以是entrys,数组,集合
  29. 3.适配器填充数据
  30. 1.arrayadapter
  31. 1.只能填充文本内容
  32. 2.只能填充一个文本
  33. 2.simpleadapter
  34. 1.可以自定义item布局,里面可以包含图片,文本,button,checkbox等..
  35. 2.可以设置多样的数据
  36.  
  37. 3.设置数据不方便
  38.  
  39. 4.自定义适配器去完成复杂样式的布局view --- baseadapter
  40. 1.baseadapter是抽象类,需要继承
  41. 2.实现未实现的方法
  42. 3.设置适配器
  43. * @author my
  44. *
  45. */
  46. public class MainActivity extends Activity {
  47.  
  48. private ListView lv;
  49. private List<Map<String,Object>> list;
  50.  
  51. @Override
  52. protected void onCreate(Bundle savedInstanceState) {
  53. super.onCreate(savedInstanceState);
  54. setContentView(R.layout.activity_main);
  55. lv = (ListView) findViewById(R.id.listView);
  56. list = new ArrayList<Map<String,Object>>();
  57. 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};
  58. Map<String,Object>map ;
  59. for (int i = 0; i < image.length; i++) {
  60. map = new HashMap<String, Object>();
  61. map.put("name", "杭州"+i);
  62. map.put("image", image[i]);
  63. list.add(map);
  64. }
  65. MyAdapter myAdapter = new MyAdapter();
  66. lv.setAdapter(myAdapter);
  67. }
  68. class MyAdapter extends BaseAdapter{
  69. /**
  70. * 必须实现,决定适配器空间的item的数量
  71. * 通常返回数据源的长度,当返回0时,没有显示
  72. */
  73. @Override
  74. public int getCount() {
  75. // TODO Auto-generated method stub
  76. return list.size();
  77. }
  78. /**
  79. * position表示的是item对应的索引
  80. * 通常根据索引来获得对应的数据,并返回
  81. * 不是必须实现
  82. *
  83. */
  84. @Override
  85. public Object getItem(int position) {
  86. // TODO Auto-generated method stub
  87. return list.get(position);
  88. }
  89. /**
  90. * position表示的是item对应的索引
  91. * 通常返回position作为item的id
  92. * 不是必须实现
  93. */
  94. @Override
  95. public long getItemId(int position) {
  96. // TODO Auto-generated method stub
  97. return position;
  98. }
  99.  
  100. /**
  101. * 用来确定一个item展示的视图view
  102. * 返回的view就表示需要显示的一个item的view
  103. * position表示的是当前显示的item的view所对应的索引
  104. * convertView 可以复用的view
  105. * parent 表示的是设置该适配器的适配器控件(listView)
  106. */
  107. //布局的复用
  108. /**
  109. * 问题: getview在滑动的过程中,会重复多次执行
  110. 1.会多次将布局文件转换成view(需要读取xml文件和解析),而这个方法是耗时,消耗资源的方法
  111. 2.会多次遍历view去找控件,会消耗时间和资源
  112. 解决:convertView表示的是可以复用view
  113. */
  114. @Override
  115. public View getView(int position, View convertView, ViewGroup parent) {
  116. // TODO Auto-generated method stub
  117. View view = convertView;
  118. ViewHolder viewHolder ;
  119. //第一次调用
  120. if(view==null){
  121. //加载布局
  122. view = View.inflate(MainActivity.this, R.layout.layout_item, null);
  123. viewHolder = new ViewHolder();
  124. //实例化控件(因为是在当前布局中查找控件,所以必须使用view调用findViewById())
  125. viewHolder.text = (TextView) view.findViewById(R.id.text);
  126. viewHolder.image = (ImageView)view.findViewById(R.id.image);
  127. //设置标记
  128. view.setTag(viewHolder);
  129. }else{
  130. //得到标记获得viewHolder对象
  131. viewHolder = (ViewHolder) view.getTag();
  132.  
  133. }
  134. //获得该索引位置的map集合
  135. Map<String,Object>map = list.get(position);
  136. //为适配器控件的每一条view设置数据
  137. viewHolder.text.setText((String)map.get("name"));
  138. viewHolder.image.setImageResource((Integer)map.get("image"));
  139. return view;
  140. }
  141.  
  142. }
  143. //自定义类(一般都使用ViewHolder类来存view控件)
  144. class ViewHolder{
  145. private TextView text;
  146. private ImageView image;
  147. }
  148.  
  149. }

Android_listView_BaseAdapter的更多相关文章

随机推荐

  1. gdi写的2048

    //-------------------------------------------[头文件及引用]----------------------------------------------- ...

  2. Dos操作

    \tree/f >c.txt \dir/s/b >c.txt

  3. jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码

    jquery单行滚动.批量多行滚动.文字图片翻屏滚动效果代码,需要的朋友可以参考下. 以下代码,运行后,需要刷新下,才能加载jquery,要不然看不到效果.一.单行滚动效果 <!DOCTYPE ...

  4. 无状态、REST、RESTful 和 Web Services【整理】

    在理解 OpenStack 的过程中,常常遇到 REST 这个概念,现从各处搜罗如下: 对 Web Service 的理解: Web 服务有点像对计算机友好的网页,基于让程序可以跨网络交换信息的标准和 ...

  5. 词汇小助手V3.0发布了——不只是一个查单词的软件

    欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...

  6. CSS换行:word-wrap、word-break和text-wrap区别

    一.word-wrap:允许对长的不可分割的单词进行分割并换行到下一行.(中英文处理效果一样) word-wrap有两个取值: 1.word-wrap: normal:只在允许的断字点换行(浏览器保持 ...

  7. 50道经典的JAVA编程题(26-30)

    50道经典的JAVA编程题(26-30),这么晚了,早点睡了要,明早8点考java祝我好运吧!!!晚安~ [程序26]Ex26.java(跳过了,好没意思的题啊)题目:请输入星期几的第一个字母来判断一 ...

  8. 2014-02-27WPF学习笔记

    //StackPanel布局 //创建时间:11:33 页面布局:Orientation默认纵向:Vertical水平为:Horizontal <Button> <Button.Co ...

  9. 如何把匿名类型.GetType()返回的对象传进泛型里面[转]

    //怎么取得匿名类型的Type放到 //泛型T当中?? var 匿名 = new { A = 0, B = 1 }; Type t = 匿名.GetType(); //然后下面 var xx = db ...

  10. Java网络编程(TCP协议-练习-上传文本文件)

    客户端: package WebProgramingDemo; import java.io.BufferedReader; public class UploadTextClient { /** * ...