android之ArrayAdapter的重写
昨天介绍了ArrayAdapter的使用,今天介绍一下更加实用的一点,对它进行重写,满足自己的个性化设计需要.
ArrayAdapter(数组适配器)一般用于显示一行文本信息,所以比较容易。
public ArrayAdapter(Context context,int textViewResourceId, List<T> objects)
上面的这行代码来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来做两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局),数据源(一个List集合)。同时用setAdapter()将ListView和Adapter绑定。
例子一:可以用来简单的显示一条文字
package jason.demo14; import java.util.ArrayList; import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class Demo13Activity extends Activity {
private ListView lv;
private ArrayList<String> list = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_expandable_list_item_1,
getData());
lv.setAdapter(adapter);
} private ArrayList<String> getData()
{
list.add("180平米的房子");
list.add("一个勤劳漂亮的老婆");
list.add("一辆宝马");
list.add("一个强壮且永不生病的身体");
list.add("一个喜欢的事业");
return list;
}
}
注意:这里的android.R.layout.simple_expandable_list_item_1是系统内置布局,样式就是如下
例子二:这个例子可以增加一个ImageView,但是在设置ArrayAdapter的时候需要增加这个自定义的布局
public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
上面的第一个参数是上下文,一般为this。第二个参数是自定义的布局文件,比如下面的就是R.layout.list_item。第三个参数是布局中用来显示文字的TextView的id,第四个参数是数据集合,跟例一一样
<?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/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/> </LinearLayout>
Activity的java代码:
package jason.demo14; import java.util.ArrayList; import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class Demo13Activity extends Activity {
private ListView lv;
private ArrayList<String> list = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listview); ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.list_item,//区别就在这一行和下一行,这里是自己定义的布局文件,
R.id.tv,//这是R.layout.list_item中TextView的ID,用来确定把添加进来的数据显示在哪个位置
getData());
lv.setAdapter(adapter);
} private ArrayList<String> getData()
{
list.add("180平米的房子");
list.add("一个勤劳漂亮的老婆");
list.add("一辆宝马");
list.add("一个强壮且永不生病的身体");
list.add("一个喜欢的事业");
return list;
}
}
效果如下:
例子3:实现更复杂的效果:
这就需要重写getView方法了,
1. 自定义列表样式
image_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/item_thumbnail"
android:layout_height="48dip"
android:layout_width="48dip"
/>
<TextView
android:id="@+id/item_file_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingLeft="5dip"
/>
</LinearLayout>
2. 自定义ArrayAdapter
public class ImageListAdapter extends ArrayAdapter<File>{
    private int resource;
    public ImageListAdapter(Context context, int resourceId, List<File> objects) {
        super(context, resourceId, objects);
        // 记录下来稍后使用
        resource = resourceId;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        LinearLayout imageListView;
        // 获取数据
        File file = getItem(position);
        String fileName = file.getName();
        Bitmap bitmap = getBitmapFromFile(file);
        // 系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。
        // 当手动完成适配时,必须手动映射数据,这需要重写getView()方法。
        // 系统在绘制列表的每一行的时候将调用此方法。
        // getView()有三个参数,
        // position表示将显示的是第几行,
        // covertView是从布局文件中inflate来的布局。
        // 我们用LayoutInflater的方法将定义好的image_item.xml文件提取成View实例用来显示。
        // 然后将xml文件中的各个组件实例化(简单的findViewById()方法)。
        // 这样便可以将数据对应到各个组件上了。
        //
        if(convertView == null) {
            imageListView = new LinearLayout(getContext());
            LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            inflater.inflate(resource, imageListView, true);//把image_item.xml布局解析到LinearLayout里面
        } else {
            imageListView = (LinearLayout)convertView;
        }
        // 获取控件,填充数据
        ImageView imageView = (ImageView) imageListView.findViewById(R.id.item_thumbnail);
        TextView textView = (TextView) imageListView.findViewById(R.id.item_file_name);
        textView.setText(fileName);
        imageView.setImageBitmap(bitmap);
        return imageListView;
    }
    // 从文件获取Bitmap用于填充
    private Bitmap getBitmapFromFile(File file) {
        Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
        return  bitmap;
    }
}
3. 绑定数据
private void bindFilesToList(File[] files) {
        List<File> fileList = new ArrayList<File>();
        for(File file : files) {
            fileList.add(file);
        }
        ImageListAdapter adapter = new ImageListAdapter(ImageFilesListActivity.this,
                                                        R.layout.image_item,
                                                        fileList);
        setListAdapter(adapter);
}
基本就是这样了
android之ArrayAdapter的重写的更多相关文章
- Android -----ArrayAdapter的重写 .
		引自:http://blog.csdn.net/jason0539/article/details/9918465 最近需要用ArrayAdapter,保存一下,以后方便查找 ArrayAdapter ... 
- Android ListView ArrayAdapter 的简单使用
		前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity ... 
- android 71  ArrayAdapter和SimpleAdapter
		Activity和item: Activity:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an ... 
- Android开发之View重写相关API-onLayout,onMeasure,MeasureSpec
		1.onLayout android.view.ViewGroup protected void onLayout(boolean changed, int l, int t, int r, int ... 
- android 适配器 ArrayAdapter,SimpleAdapter的学习
		今天认真看了下android适配器,学习了下它的使用方法. 一,ArrayAdapter ArrayAdapter 比较简单,只可以存放一行文本信息.下面是简单的实现 private ListView ... 
- Android 软件退出系统方法重写
		Android 软件退出系统按键方法重写 //针对Andriod软件退出系统按键方法重写 ;//key down time @Override public boolean onKeyDown(int ... 
- Android在ArrayAdapter<>里如何得到List<>的Items
		public class ItemAdapter extends ArrayAdapter<DemoModel> { private final List<DemoModel> ... 
- Android ArrayAdapter 详解
		本文主要讲解ArrayAdapter的创建方法,我把ArrayAdapter分为三种:简单的.样式丰富的但内容简单的.内容丰富的. 默认的,ArrayAdapter期望接受的样式文件里只含有一个tex ... 
- android笔记:ListView及ArrayAdapter
		ListView用于展示大量数据,而数据无法直接传递给ListView,需要借助适配器adapter来完成. ArrayAdapter是最常用的adapter,可以通过泛型来指定要适配的数据类型.常见 ... 
随机推荐
- Ajax访问PHP页面出现的跨域问题
			1.跨域问题:简单来说就是A域名下的程序想从B域名下的文件里面获取信息(这句话是我上网看到的) 2.一般请求(本地测试): 请求页 响应页 这样做是没问题的. 但我如果将Ajax请求的url ... 
- jqeruy的append一个有趣的用法(挪移控件位置)
			使用:$(放置的容器).append($(需要迁移的控件)) 需求:列表中点击编辑可以在无刷修改 以前的方法是在列表中的每条数据直接放置控件.但是这个地区选择控件是服务器自定义控件不可以放置在列表的循 ... 
- 织梦list文章列表按权重排序
			织梦的文章列表按权重排序 DEDECMS(织梦)5.6系统支持文档权重weight排序,可以在模板中使用: {dede:arclist row='10' titlelen='50' orderby=' ... 
- Arduino当avr开发板
			原理并不复杂,因为arduino本来就是avr+一堆的库,找个能编译出hex的工具下载到板子就行. 但实际做起来还是碰到很多问题. 先是尝试eclipse+avr plugin 编译时出现make: ... 
- asp.net core + angular2
			asp.net core + angular2 的环境配置 国内整个对 asp.net core 和 angular2这些新出来的关注度不是太好.跟国外比很大差距. 我在试着去做这个整合的时候也碰到 ... 
- 转:script中的async和defer
			script中的async和defer defer: This Boolean attribute is set to indicate to a browser that the script is ... 
- NOI2014 Day2
			NOI2014 Day2 动物园 题目描述:给出一个字符串(长度为\(Len\)),设\(num[i]\)为字符串的前\(i\)个字符构成的子串(\(A\))中,满足\(A\)的前\(L\)个字符既是 ... 
- [LeetCode][Python]Reverse Integer
			# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/reverse ... 
- linux内核源码阅读之facebook硬盘加速flashcache之八
			前面我们的分析中重点关注正常的数据流程,这一小节关注如果有异常,那么流程是怎么走完的呢? 1)创建新任务时kcached_job申请不到 2)读写命中时cache块为忙 3)系统关机时处理,系统开机时 ... 
- ItextSharp代码示例
			示例代码目录 示例代码0101. 5 示例代码0102. 7 示例代码0103. 9 示例代码0104. 11 示例代码0105. 13 示例代码0106. 15 示例代码0107. 17 示例代码0 ... 
