昨天介绍了ArrayAdapter的使用,今天介绍一下更加实用的一点,对它进行重写,满足自己的个性化设计需要.

ArrayAdapter(数组适配器)一般用于显示一行文本信息,所以比较容易。

  1. public ArrayAdapter(Context context,int textViewResourceId, List<T> objects)

上面的这行代码来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来做两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局),数据源(一个List集合)。同时用setAdapter()将ListView和Adapter绑定。

例子一:可以用来简单的显示一条文字

  1. package jason.demo14;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.widget.ArrayAdapter;
  8. import android.widget.ListView;
  9.  
  10. public class Demo13Activity extends Activity {
  11. private ListView lv;
  12. private ArrayList<String> list = new ArrayList<String>();
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. lv = (ListView)findViewById(R.id.listview);
  18. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  19. this,
  20. android.R.layout.simple_expandable_list_item_1,
  21. getData());
  22. lv.setAdapter(adapter);
  23. }
  24.  
  25. private ArrayList<String> getData()
  26. {
  27. list.add("180平米的房子");
  28. list.add("一个勤劳漂亮的老婆");
  29. list.add("一辆宝马");
  30. list.add("一个强壮且永不生病的身体");
  31. list.add("一个喜欢的事业");
  32. return list;
  33. }
  34. }

注意:这里的android.R.layout.simple_expandable_list_item_1是系统内置布局,样式就是如下

  1. 例子二:这个例子可以增加一个ImageView,但是在设置ArrayAdapter的时候需要增加这个自定义的布局
  1. public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

上面的第一个参数是上下文,一般为this。第二个参数是自定义的布局文件,比如下面的就是R.layout.list_item。第三个参数是布局中用来显示文字的TextView的id,第四个参数是数据集合,跟例一一样

  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.  
  7. <ImageView
  8. android:id="@+id/img"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:src="@drawable/ic_launcher"
  12. />
  13. <TextView
  14. android:id="@+id/tv"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. />
  18.  
  19. </LinearLayout>

Activity的java代码:

  1. package jason.demo14;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.widget.ArrayAdapter;
  8. import android.widget.ListView;
  9.  
  10. public class Demo13Activity extends Activity {
  11. private ListView lv;
  12. private ArrayList<String> list = new ArrayList<String>();
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. lv = (ListView)findViewById(R.id.listview);
  18.  
  19. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  20. this,
  21. R.layout.list_item,//区别就在这一行和下一行,这里是自己定义的布局文件,
  22. R.id.tv,//这是R.layout.list_item中TextView的ID,用来确定把添加进来的数据显示在哪个位置
  23. getData());
  24. lv.setAdapter(adapter);
  25. }
  26.  
  27. private ArrayList<String> getData()
  28. {
  29. list.add("180平米的房子");
  30. list.add("一个勤劳漂亮的老婆");
  31. list.add("一辆宝马");
  32. list.add("一个强壮且永不生病的身体");
  33. list.add("一个喜欢的事业");
  34. return list;
  35. }
  36. }

效果如下:

例子3:实现更复杂的效果:

这就需要重写getView方法了,

1. 自定义列表样式

image_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="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="horizontal">
  6. <ImageView
  7. android:id="@+id/item_thumbnail"
  8. android:layout_height="48dip"
  9. android:layout_width="48dip"
  10. />
  11. <TextView
  12. android:id="@+id/item_file_name"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:textAppearance="?android:attr/textAppearanceLarge"
  16. android:minHeight="?android:attr/listPreferredItemHeight"
  17. android:gravity="center_vertical"
  18. android:paddingLeft="5dip"
  19. />
  20. </LinearLayout>

2. 自定义ArrayAdapter

  1. public class ImageListAdapter extends ArrayAdapter<File>{
  2. private int resource;
  3. public ImageListAdapter(Context context, int resourceId, List<File> objects) {
  4. super(context, resourceId, objects);
  5. // 记录下来稍后使用
  6. resource = resourceId;
  7. }
  8.  
  9. public View getView(int position, View convertView, ViewGroup parent) {
  10. LinearLayout imageListView;
  11. // 获取数据
  12. File file = getItem(position);
  13. String fileName = file.getName();
  14. Bitmap bitmap = getBitmapFromFile(file);
  15.  
  16. // 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。
  17. // 当手动完成适配时,必须手动映射数据,这需要重写getView()方法。
  18. // 系统在绘制列表的每一行的时候将调用此方法。
  19. // getView()有三个参数,
  20. // position表示将显示的是第几行,
  21. // covertView是从布局文件中inflate来的布局。
  22. // 我们用LayoutInflater的方法将定义好的image_item.xml文件提取成View实例用来显示。
  23. // 然后将xml文件中的各个组件实例化(简单的findViewById()方法)。
  24. // 这样便可以将数据对应到各个组件上了。
  25. //
  26. if(convertView == null) {
  27. imageListView = new LinearLayout(getContext());
  28. LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  29. inflater.inflate(resource, imageListView, true);//把image_item.xml布局解析到LinearLayout里面
  30. } else {
  31. imageListView = (LinearLayout)convertView;
  32. }
  33.  
  34. // 获取控件,填充数据
  35. ImageView imageView = (ImageView) imageListView.findViewById(R.id.item_thumbnail);
  36. TextView textView = (TextView) imageListView.findViewById(R.id.item_file_name);
  37. textView.setText(fileName);
  38. imageView.setImageBitmap(bitmap);
  39.  
  40. return imageListView;
  41. }
  42.  
  43. // 从文件获取Bitmap用于填充
  44. private Bitmap getBitmapFromFile(File file) {
  45. Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
  46. return bitmap;
  47. }
  48. }

3. 绑定数据

  1. private void bindFilesToList(File[] files) {
  2. List<File> fileList = new ArrayList<File>();
  3. for(File file : files) {
  4. fileList.add(file);
  5. }
  6.  
  7. ImageListAdapter adapter = new ImageListAdapter(ImageFilesListActivity.this,
  8. R.layout.image_item,
  9. fileList);
  10. setListAdapter(adapter);
  11. }

基本就是这样了

android之ArrayAdapter的重写的更多相关文章

  1. Android -----ArrayAdapter的重写 .

    引自:http://blog.csdn.net/jason0539/article/details/9918465 最近需要用ArrayAdapter,保存一下,以后方便查找 ArrayAdapter ...

  2. Android ListView ArrayAdapter 的简单使用

    前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity ...

  3. android 71 ArrayAdapter和SimpleAdapter

    Activity和item: Activity:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an ...

  4. Android开发之View重写相关API-onLayout,onMeasure,MeasureSpec

     1.onLayout android.view.ViewGroup protected void onLayout(boolean changed, int l, int t, int r, int ...

  5. android 适配器 ArrayAdapter,SimpleAdapter的学习

    今天认真看了下android适配器,学习了下它的使用方法. 一,ArrayAdapter ArrayAdapter 比较简单,只可以存放一行文本信息.下面是简单的实现 private ListView ...

  6. Android 软件退出系统方法重写

    Android 软件退出系统按键方法重写 //针对Andriod软件退出系统按键方法重写 ;//key down time @Override public boolean onKeyDown(int ...

  7. Android在ArrayAdapter<>里如何得到List<>的Items

    public class ItemAdapter extends ArrayAdapter<DemoModel> { private final List<DemoModel> ...

  8. Android ArrayAdapter 详解

    本文主要讲解ArrayAdapter的创建方法,我把ArrayAdapter分为三种:简单的.样式丰富的但内容简单的.内容丰富的. 默认的,ArrayAdapter期望接受的样式文件里只含有一个tex ...

  9. android笔记:ListView及ArrayAdapter

    ListView用于展示大量数据,而数据无法直接传递给ListView,需要借助适配器adapter来完成. ArrayAdapter是最常用的adapter,可以通过泛型来指定要适配的数据类型.常见 ...

随机推荐

  1. 工作备份 build.gradle

    apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion '22.0.0' de ...

  2. skynet初学

    记录下命令 git clone https://github.com/cloudwu/skynet.git sudo apt-get install autoconf sudo apt-get ins ...

  3. Hash算法原理理解

    我们有很多的小猪,每个的体重都不一样,假设体重分布比较平均(我们考虑到公斤级别),我们按照体重来分,划分成100个小猪圈. 然后把每个小猪,按照体重赶进各自的猪圈里,记录档案. 好了,如果我们要找某个 ...

  4. SQL Server 查看对象的权限

    例子 1. 查看登录名 loginA的权限: create login loginA with password = '123456'; go use studio; create user logi ...

  5. Android应用中使用自定义文字

    在Android系统中可以很方便的修改字体样式.系统提供了三种样式,分别是sans,serif,monospace.可以在xml布局文件中通过 android:typeface="[sans ...

  6. Win32中安全的子类化(翻译)

    关于子类化的话题虽然有些旧,但它至今仍然不失为一种开发Windows的强有力技术,在MFC的内核.甚至.NET的内核中都离不开它,希望本连载能对Windows开发的爱好者有所帮助. 原文标题:Safe ...

  7. C语言 大小端 字节对齐

    参考:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html 1. 大端序:数据的高位字节存放在地址的低端,低位字节存放在地址的 ...

  8. iOS禁用部分文件ARC

    TARGETS的build Phases中的Compile Source里修改文件备注文件参数设定: 增加-fobjc-arc来使单个文件 支持ARC,或者添加-fno-objc-arc使单个文件不支 ...

  9. 在线词典php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Flash,EEPROM差别

    flash是用来存储代码的,在执行过程中不能改:EEPROM是用来保存用户数据,执行过程中能够改变,比方一个时钟的闹铃时间初始化设定为12:00,后来在执行中改为6:00,这是保存在EEPROM里,不 ...