Adapter的使用

ArrayAdapter(字符串调用toString)

ArrayAdapter是一个绑定View到一组对象的通用类。默认情况下,ArrayAdapter绑定每个对象的toString值到在layout中预先定义的TextView控件上。 可变通的,构造函数允许你使用更加复杂的layout或者通过重写getView方法来扩展类从而使用TextView的替代物(如ImageView或嵌套的layout)。

SimpleCursorAdapter(游标)

SimpleCursorAdapter绑定View到Content Provider查询返回的游标上。指定一个XML layout定义,然后将数据集中的每一列的值绑定到layout中的一个View上。

Adapter进行数据绑定

//将数组中的字符串绑定到ListView中用于显示每个项目的简单TextView控件上


ArrayList < String > myStringArray = new ArrayList < String >();

ArrayAdapter < String > myAdapterInstance ;

//显示布局,可以系统自带,也可以自定义
int layoutID = android . R . layout . simple_list_item_1 ;

//参数context,布局,数据
myAdapterInstance
= new ArrayAdapter < String >( this , layoutID , myStringArray );

myListView
. setAdapter ( myAdapterInstance );

重写ArrayAdapter,显示多个元素

1.创建一个新的ToDoItem类来保存任务和任务的创建日期.

package
 com
.
paad
.
todolist
;


import java . text . SimpleDateFormat ;
import java . util . Date ;

public class ToDoItem {

   
String task ;
   
Date created ;

   
public String getTask () {
     
return task ;
   
}

   
public Date getCreated () {
     
return created ;
   
}

   
public ToDoItem ( String _task ) {
     
this ( _task , new Date ( java . lang . 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.创建一个自定义的layout来显示每一个子项目

<!-- 定义两个TextView,一个显示名称,一个显示日期 -->

<? xml version =” 1.0 encoding =” utf - 8 ”?>

   
<RelativeLayout xmlns:android = ”http://schemas.android.com/apk/res/android”
   
android:layout_width = ”fill_parent”
   
android:layout_height = ”fill_parent”
   
android:background = ”@color/notepad_paper” >

   
<TextView
     
android:id = ”@+id/rowDate”
     
android:layout_width = ”wrap_content”
     
android:layout_height = ”fill_parent”
     
android:padding = ”10dp”
     
android:scrollbars = ”vertical”
     
android:fadingEdge = ”vertical”
     
android:textColor = ”@color/notepad_text”
     
android:layout_alignParentRight = ”true”
   
/>

   
<TextView
     
android:id = ”@+id/row”
     
android:layout_width = ”fill_parent”
     
android:layout_height = ”fill_parent”
     
android:padding = ”10dp”
     
android:scrollbars = ”vertical”
     
android:fadingEdge = ”vertical”
     
android:textColor = ”@color/notepad_text”
     
android:layout_alignParentLeft = ”@+id/rowDate”
   
/>
</RelativeLayout>

3.创建一个新的类(ToDoItemAdapter),使用指定的ToDoItem变量来扩展一个ArrayAdapter。重写getView方法来将ToDoItem对象中的task和date属性指定给第4步创建的layout中的View。

import
 java
.
text
.
SimpleDateFormat
;

import android . content . Context ;
import java . util .*;
import android . view .*;
import android . widget .*;

public class ToDoItemAdapter extends ArrayAdapter < ToDoItem > {

     
int resource ;

     
public ToDoItemAdapter ( Context _context , int _resource , List < ToDoItem > _items ) {
           
super ( _context , _resource , _items );
            resource
= _resource ;
     
}

     
@Override
     
public View getView ( int position , View convertView , ViewGroup parent ){

           
LinearLayout todoView ;
           
ToDoItem item = getItem ( position );
           
String taskString = item . getTask ();
           
Date createdDate = item . getCreated ();
           
SimpleDateFormat sdf = new SimpleDateFormat (“ dd / MM / yy ”);
           
String dateString = sdf . format ( createdDate );

           
if ( convertView == null ){
                  todoView
= new LinearLayout ( getContext ());
                 
String inflater = Context . LAYOUT_INFLATER_SERVICE ;
                 
LayoutInflater vi ;
                  vi
= ( LayoutInflater ) getContext (). getSystemService ( inflater );
                  vi
. inflate ( resource , todoView , true );
           
}
           
else {
                  todoView
= ( LinearLayout ) convertView ;
           
}

           
TextView dateView = ( TextView ) todoView . findViewById ( R . id . rowDate );
           
TextView taskView = ( TextView ) todoView . findViewById ( R . id . row );
            dateView
. setText ( dateString );
            taskView
. setText ( taskString );
           
return todoView ;
     
}
}

4.在Activity中显示

    
private
 
ArrayList
<
ToDoItem
>
 todoItems
;

   
private ListView myListView ;
   
//自定义的Adapter
   
private ToDoItemAdapter < ToDoItem > aa ;

   
@Override

   
public void onCreate ( Bundle icicle ) {

       
super . onCreate ( icicle );
        setContentView
( R . layout . main );

        myListView
= ( ListView ) findViewById ( R . id . myListView );

        todoItems
= new ArrayList < ToDoItem >();
       
//上面定义的布局
       
int resID = R . layout . todolist_item ;

        aa
= new ToDoItemAdapter < ToDoItem >( this , resID , todoItems );

        myListView
. setAdapter ( aa );
   
}

使用SimpleCursorAdapter

SimpleCursorAdapter允许你绑定一个游标的列到ListView上,并使用自定义的layout显示每个项目。

SimpleCursorAdapter的创建,需要传入当前的上下文、一个layout资源,一个游标和两个数组: 一个包含使用的列的名字,另一个(相同大小)数组包含View中的资源ID,用于显示相应列的数据值。

//构造一个SimpleCursorAdapter来显示联系人信息:

String uriString = content : //contacts/people/”;

Cursor myCursor = managedQuery ( Uri . parse ( uriString ), null , null , null , null );

//字段
String [] fromColumns = new String [] { People . NUMBER , People . NAME };
//组件
int [] toLayoutIDs = new int [] { R . id . nameTextView , R . id . numberTextView };

SimpleCursorAdapter myAdapter ;

myAdapter
= new SimpleCursorAdapter ( this , R . layout . simplecursorlayout , myCursor , fromColumns , toLayoutIDs );

myListView
. setAdapter ( myAdapter );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值