zoukankan      html  css  js  c++  java
  • Android中Adapter类的使用 “Adapter”

    Adapter用来把数据绑定到扩展了AdapterView类的视图组(例如:ListView或Gallery)。Adapter负责创建代表所绑定父视图中的底层数据的子视图。

    可以创建自己的Adapter类,构建自己的由AdapterView派生的控件。

    也就是上述的各个类都可以使用Adapter类。

    Adapter类解析:

    在很多时候,都不需要从创建自己的Adapter。Android提供了一个Adapter集合,用于从公共数据源(包括数组和游标)来向扩展了AdapterView的原生控件提供数据。因为Adapter既负责提供数据,又负责创建代表每一条目的视图,所以Adapter可以从根本上修改它所绑定的控件的外观和功能。

    Android SDK提供了多种Adapter,比如:ArrayAdapter、SimpleCursorAdapter等...

    ArrayAdapter使用泛型来把Adapter视图绑定到一个指定类的对象的数组。默认情况下,ArrayAdapter使用数组中每个对象的toString值来创建和填充文本视图。

    SimpleCursorAdapter可以把一个布局中的视图和游标的特定列绑定到一起。可以指定一个将被填充以显示每个子视图的XML布局,然后把游标中的每一列和那个布局中的特定视图进行绑定。Adapter将为每一个游标项创建一个新的视图,并将布局填充到视图中,使用游标中对应列的值填充布局中的每个视图。

    在大多数情况下,需要定制ArrayAdapter来填充每个视图使用的布局,以表示底层的数组数据。为此需要使用特定类型的变体来扩展ArrayAdapter,并重写getView方法来向布局视图分配对象属性。

    其中的getView()的参数描述了要显示的条目的位置,要更新的视图,以及将包好这个新视图的视图组。getItem()将返回存储在底层数组的指定索引位置的值。

    1 自定义的ArrayAdapter

    实例效果如下:

    每一个Item的View是自定义的View。

    package com.demo.adapter;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import com.demo.R;
    import com.demo.domain.ToDoItem;
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    import java.util.List;
    public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {
        private int mResource;
        public ToDoItemAdapter(Context context, int resource, List<ToDoItem> objects) {
            super(context, resource, objects);
            // 初始化时,传递xml布局
            this.mResource = resource;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            RelativeLayout todoView;
            ToDoItem item = getItem(position);
            String taskString = item.getTask();
            Date createdDate = item.getCreated();
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
            String dataString = sdf.format(createdDate);
            if (convertView == null) {
                // 初始化View布局
                todoView = new RelativeLayout(getContext());
                String inflater = Context.LAYOUT_INFLATER_SERVICE;
                LayoutInflater li;
                li = (LayoutInflater) getContext().getSystemService(inflater);
                li.inflate(mResource, todoView, true);
            } else {
                todoView = (RelativeLayout) convertView;
            }
            TextView taskView = (TextView) todoView.findViewById(R.id.row);
            TextView dateView = (TextView) todoView.findViewById(R.id.tv_date);
            taskView.setText(taskString);
            dateView.setText(dataString);
            return todoView;
        }
    }

    自定义ArrayAdapter时,其Item的View是自定义的xml定义的布局;与视图绑定的数据,也是来自自定义的实例类。

    // 获取数据
    ToDoItem item = getItem(position);

    getItem()将返回存储在底层数组的指定索引位置的值。

    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <TextView
            android:id="@+id/tv_date"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:background="@color/notepad_paper"
            android:fadingEdge="vertical"
            android:padding="10dp"
            android:scrollbars="vertical"
            android:textColor="#f000" />
        <com.demo.view.TextViewDesign
            android:id="@+id/row"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/tv_date"
            android:fadingEdge="vertical"
            android:padding="10dp"
            android:scrollbars="vertical"
            android:textColor="@color/notepad_text" >
        </com.demo.view.TextViewDesign>
    </RelativeLayout>

    实例类:

    package com.demo.domain;
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    /**
     * <功能描述> 待办事件实体类
     * 
     * @author Administrator
     */
    public class ToDoItem {
        private String task;
        private Date created;
        public String getTask() {
            return task;
        }
        public Date getCreated() {
            return created;
        }
        public ToDoItem(String _task) {
            this(_task, new Date(System.currentTimeMillis()));
        }
        public ToDoItem(String _task, Date _created) {
            task = _task;
            created = _created;
        }
        @Override
        public String toString() {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
            String dateString = sdf.format(created);
            return "(" + dateString + ") " + task;
        }
    }

    2 自定义SimpleCursorAdapter

    SimpleCursorAdapter用于将一个Cursor绑定到一个AdapterView,并使用一个布局来定义每个行/条目的UI。每个行的视图的内容是用底层Cursor中对应行的列值进行填充的。

  • 相关阅读:
    最详细的hadoop2.2.0集群的HA高可靠的最简单配置
    HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
    机器学习的学习笔记1
    AngularJS在IE8的支持
    OC 异常处理
    OC NSString练习
    OC继承
    OC--@property和@synthesize关键字
    OC输入输出
    OC数组和字典简单使用
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6399210.html
Copyright © 2011-2022 走看看