ArrayAdapter和SimpleCursorAdapter

系统 1559 0

    使用ArrayAdapter定制 To-Do List

     

    这个例子将扩展 To-Do List 工程,以一个 ToDoItem 对象来储存每一个项目,包含每个项目的创建日期。

     

    你将扩展 ArrayAdapter 类来绑定一组 ToDoItem 对象到 ListView 上,并定制用于显示每一个 ListView 项目的 layout

     

    1. 返回到 To-Do List 工程。创建一个新的 ToDoItem 类来保存任务和任务的创建日期。重写 toString 方法来返回一个项目数据的概要。

     

Java代码 
  1. package  com.paad.todolist;  
  2. import  java.text.SimpleDateFormat;  
  3. import  java.util.Date;  
  4.    
  5. public   class  ToDoItem {  
  6. String task;  
  7. Date created;  
  8.    
  9. public  String getTask() {  
  10. return  task;  
  11. }  
  12.    
  13. public  Date getCreated() {  
  14. return  created;  
  15. }  
  16.    
  17. public  ToDoItem(String _task) {  
  18. this (_task,  new  Date(java.lang.System.currentTimeMillis()));  
  19. }  
  20.    
  21. public  ToDoItem(String _task, Date _created) {  
  22. task = _task;  
  23. created = _created;  
  24. }  
  25.    
  26. @Override   
  27. public  String toString() {  
  28. SimpleDateFormat sdf =  new  SimpleDateFormat(“dd/MM/yy”);  
  29. String dateString = sdf.format(created);  
  30. return  “(“ + dateString + “) “ + task;  
  31. }  
  32. }  
 

 

2. 打开 ToDoList Activity ,修改 ArrayList ArrayAdapter 变量的类型,储存 ToDoItem 对象而不是字符串。然后,你将修改 onCreate 方法来更新相应的变量初始化。你还需要更新 onKeyListener 处理函数来支持 ToDoItem 对象。

 

Java代码 
  1. private  ArrayList<ToDoItem> todoItems;  
  2. private  ListView myListView;  
  3. private  EditText myEditText;  
  4. private  ArrayAdapter<ToDoItem> aa;  
  5.    
  6. @Override   
  7. public   void  onCreate(Bundle icicle) {  
  8. super .onCreate(icicle);  
  9.    
  10. // Inflate your view   
  11. setContentView(R.layout.main);  
  12.    
  13. // Get references to UI widgets   
  14. myListView = (ListView)findViewById(R.id.myListView);  
  15. myEditText = (EditText)findViewById(R.id.myEditText);  
  16. todoItems =  new  ArrayList<ToDoItem>();  
  17. int  resID = R.layout.todolist_item;  
  18. aa =  new  ArrayAdapter<ToDoItem>( this , resID, todoItems);  
  19. myListView.setAdapter(aa);  
  20. myEditText.setOnKeyListener( new  OnKeyListener() {  
  21. public   boolean  onKey(View v,  int  keyCode, KeyEvent event)  
  22. {  
  23. if  (event.getAction() == KeyEvent.ACTION_DOWN)  
  24. if  (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)  
  25. {  
  26. ToDoItem newItem;  
  27. newItem =  new  ToDoItem(myEditText.getText().toString());  
  28. todoItems.add( 0 , newItem);  
  29. myEditText.setText(“”);  
  30. aa.notifyDataSetChanged();  
  31. cancelAdd();  
  32. return   true ;  
  33. }  
  34. return   false ;  
  35. }  
  36. });  
  37. registerForContextMenu(myListView);  
  38. }  
 

 

3. 如果你运行 Activity ,它将显示每个 to-do 项目,如图 5-3 所示。

 

ArrayAdapter和SimpleCursorAdapter

5-3

 

4. 现在,你可以创建一个自定义的 layout 来显示每一个 to-do 项目。修改在第 4 章中创建的自定义 layout ,包含另外一个 TextView ,它将用于显示每个 to-do 项目的创建日期。

 

Xml代码 
  1. <? xml   version =”1.0”  encoding =”utf-8” ?>   
  2. < RelativeLayout   xmlns:android =”http://schemas.android.com/apk/res/android”  
  3. android:layout_width =”fill_parent”  
  4. android:layout_height =”fill_parent”  
  5. android:background =”@color/notepad_paper” >   
  6. < TextView   
  7. android:id =”@+id/rowDate”  
  8. android:layout_width =”wrap_content”  
  9. android:layout_height =”fill_parent”  
  10. android:padding =”10dp”  
  11. android:scrollbars =”vertical”  
  12. android:fadingEdge =”vertical”  
  13. android:textColor =”@color/notepad_text”  
  14. android:layout_alignParentRight =”true”  
  15. />   
  16. < TextView   
  17. android:id =”@+id/row”  
  18. android:layout_width =”fill_parent”  
  19. android:layout_height =”fill_parent”  
  20. android:padding =”10dp”  
  21. android:scrollbars =”vertical”  
  22. android:fadingEdge =”vertical”  
  23. android:textColor =”@color/notepad_text”  
  24. android:layout_alignParentLeft =”@+id/rowDate”  
  25. />   
  26. </ RelativeLayout >   
 

 

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

Java代码 
  1.    
  2. import  java.text.SimpleDateFormat;  
  3. import  android.content.Context;  
  4. import  java.util.*;  
  5. import  android.view.*;  
  6. import  android.widget.*;  
  7.    
  8. public   class  ToDoItemAdapter  extends  ArrayAdapter<ToDoItem> {  
  9. int  resource;  
  10.    
  11. public  ToDoItemAdapter(Context _context, int  _resource, List<ToDoItem> _items) {  
  12. super (_context, _resource, _items);  
  13. resource = _resource;  
  14. }  
  15.    
  16. @Override   
  17. public  View getView( int  position, View convertView, ViewGroup parent)  
  18. {  
  19. LinearLayout todoView;  
  20. ToDoItem item = getItem(position);  
  21. String taskString = item.getTask();  
  22. Date createdDate = item.getCreated();  
  23. SimpleDateFormat sdf =  new  SimpleDateFormat(“dd/MM/yy”);  
  24. String dateString = sdf.format(createdDate);  
  25. if  (convertView ==  null )  
  26. {  
  27. todoView =  new  LinearLayout(getContext());  
  28. String inflater = Context.LAYOUT_INFLATER_SERVICE;  
  29. LayoutInflater vi;  
  30. vi = (LayoutInflater)getContext().getSystemService(inflater);  
  31. vi.inflate(resource, todoView,  true );  
  32. }  
  33. else   
  34. {  
  35. todoView = (LinearLayout) convertView;  
  36. }  
  37. TextView dateView = (TextView)todoView.findViewById(R.id.rowDate);  
  38. TextView taskView = (TextView)todoView.findViewById(R.id.row);  
  39. dateView.setText(dateString);  
  40. taskView.setText(taskString);  
  41. return  todoView;  
  42. }  
  43. }  
 

 

6. 最后,用 ToDoItemAdapter 替换 ArrayAdapter 的定义。

 

private ToDoItemAdapter aa;

 

onCreate 中,使用 new ToDoItemAdapter 来替换 ArrayAdapter<String> 的实例化。

 

aa = new ToDoItemAdapter(this, resID, todoItems);

 

7. 如果你运行 Activity ,它看起来如图 5-4 的截图。

 

ArrayAdapter和SimpleCursorAdapter

5-4

 

使用SimpleCursorAdapter

 

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

 

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

 

下面的框架代码显示了如何构造一个 SimpleCursorAdapter 来显示联系人信息:

 

Java代码 
  1. String uriString = “content: //contacts/people/”;   
  2. Cursor myCursor = managedQuery(Uri.parse(uriString),  null null null null );  
  3. String[] fromColumns =  new  String[] {People.NUMBER, People.NAME};  
  4. int [] toLayoutIDs =  new   int [] { R.id.nameTextView, R.id.numberTextView};  
  5. SimpleCursorAdapter myAdapter;  
  6. myAdapter =  new  SimpleCursorAdapter(
分享到:
评论
jandroid
  • 浏览: 647346 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最新评论

ArrayAdapter和SimpleCursorAdapter


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论