ArrayAdapter跟SimpleCursorAdapter

ArrayAdapter和SimpleCursorAdapter

    使用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(

文章评论

ArrayAdapter跟SimpleCursorAdapter
什么才是优秀的用户界面设计
ArrayAdapter跟SimpleCursorAdapter
Java 与 .NET 的平台发展之争
ArrayAdapter跟SimpleCursorAdapter
Web开发人员为什么越来越懒了?
ArrayAdapter跟SimpleCursorAdapter
老美怎么看待阿里赴美上市
ArrayAdapter跟SimpleCursorAdapter
程序员眼里IE浏览器是什么样的
ArrayAdapter跟SimpleCursorAdapter
聊聊HTTPS和SSL/TLS协议
ArrayAdapter跟SimpleCursorAdapter
如何区分一个程序员是“老手“还是“新手“?
ArrayAdapter跟SimpleCursorAdapter
Web开发者需具备的8个好习惯
ArrayAdapter跟SimpleCursorAdapter
程序员的样子
ArrayAdapter跟SimpleCursorAdapter
十大编程算法助程序员走上高手之路
ArrayAdapter跟SimpleCursorAdapter
看13位CEO、创始人和高管如何提高工作效率
ArrayAdapter跟SimpleCursorAdapter
60个开发者不容错过的免费资源库
ArrayAdapter跟SimpleCursorAdapter
程序员的一天:一寸光阴一寸金
ArrayAdapter跟SimpleCursorAdapter
中美印日四国程序员比较
ArrayAdapter跟SimpleCursorAdapter
要嫁就嫁程序猿—钱多话少死的早
ArrayAdapter跟SimpleCursorAdapter
程序员的鄙视链
ArrayAdapter跟SimpleCursorAdapter
Java程序员必看电影
ArrayAdapter跟SimpleCursorAdapter
程序员必看的十大电影
ArrayAdapter跟SimpleCursorAdapter
如何成为一名黑客
ArrayAdapter跟SimpleCursorAdapter
代码女神横空出世
ArrayAdapter跟SimpleCursorAdapter
我是如何打败拖延症的
ArrayAdapter跟SimpleCursorAdapter
旅行,写作,编程
ArrayAdapter跟SimpleCursorAdapter
“懒”出效率是程序员的美德
ArrayAdapter跟SimpleCursorAdapter
程序员最害怕的5件事 你中招了吗?
ArrayAdapter跟SimpleCursorAdapter
10个调试和排错的小建议
ArrayAdapter跟SimpleCursorAdapter
5款最佳正则表达式编辑调试器
ArrayAdapter跟SimpleCursorAdapter
程序员和编码员之间的区别
ArrayAdapter跟SimpleCursorAdapter
亲爱的项目经理,我恨你
ArrayAdapter跟SimpleCursorAdapter
不懂技术不要对懂技术的人说这很容易实现
ArrayAdapter跟SimpleCursorAdapter
那些争议最大的编程观点
ArrayAdapter跟SimpleCursorAdapter
总结2014中国互联网十大段子
ArrayAdapter跟SimpleCursorAdapter
当下全球最炙手可热的八位少年创业者
ArrayAdapter跟SimpleCursorAdapter
为什么程序员都是夜猫子
ArrayAdapter跟SimpleCursorAdapter
程序员都该阅读的书
ArrayAdapter跟SimpleCursorAdapter
我的丈夫是个程序员
ArrayAdapter跟SimpleCursorAdapter
程序员周末都喜欢做什么?
ArrayAdapter跟SimpleCursorAdapter
我跳槽是因为他们的显示器更大
ArrayAdapter跟SimpleCursorAdapter
一个程序员的时间管理
ArrayAdapter跟SimpleCursorAdapter
编程语言是女人
ArrayAdapter跟SimpleCursorAdapter
漫画:程序员的工作
ArrayAdapter跟SimpleCursorAdapter
团队中“技术大拿”并非越多越好
ArrayAdapter跟SimpleCursorAdapter
程序猿的崛起——Growth Hacker
ArrayAdapter跟SimpleCursorAdapter
鲜为人知的编程真相
ArrayAdapter跟SimpleCursorAdapter
初级 vs 高级开发者 哪个性价比更高?
ArrayAdapter跟SimpleCursorAdapter
老程序员的下场
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有