zoukankan      html  css  js  c++  java
  • Android中的Adapter 详解(五)

    ArrayAdapter和SimpleCursorAdapter例子:

    使用ArrayAdapter定制To-Do List

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

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

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

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

    private ArrayList<ToDoItem> todoItems;    
    private ListView myListView;     
    private EditText myEditText;     
    private ArrayAdapter<ToDoItem> aa;     
      @Override  
    public void onCreate(Bundle icicle) {    
     super.onCreate(icicle); // Inflate your view setContentView(R.layout.main); //      
     Get references to UI widgets myListView = (ListView)findViewById(R.id.myListView);    
       myEditText = (EditText)findViewById(R.id.myEditText);     
       todoItems = new ArrayList<ToDoItem>();     
       int resID = R.layout.todolist_item; aa = new ArrayAdapter<ToDoItem>(this, resID, todoItems);     
        myListView.setAdapter(aa);    
     myEditText.setOnKeyListener(new OnKeyListener() {     
    public boolean onKey(View v, int keyCode, KeyEvent event) {    
     if (event.getAction() == KeyEvent.ACTION_DOWN)    
       if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {     
       ToDoItem newItem; newItem = new ToDoItem(myEditText.getText().toString()); todoItems.add(0, newItem);    
        myEditText.setText(“”);     
        aa.notifyDataSetChanged(); cancelAdd(); return true;     
          }     
        return false;     
        }    
      });    <span id="transmark"></span>
     registerForContextMenu(myListView);     
    }    


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

     

    5-3

     

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

    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;     
      
      }     
      
    }   

    5. 创建一个新的类(ToDoItemAdapter),使用指定的ToDoItem变量来扩展一个ArrayAdapter。重写getView方法来将ToDoItem对象中的taskdate属性指定给第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;     
      
      }     
      
    }   


     

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

     

    private ToDoItemAdapter aa;

     

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

     

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

     

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

     


     

     

    5-4

     

    使用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,     
        eople.NAME    
    };    
     int[] toLayoutIDs = new int[] {     
         R.id.nameTextView,    
         R.id.numberTextView    
    };     
        
    SimpleCursorAdapter myAdapter; myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor,fromColumns,toLayoutIDs)


  • 相关阅读:
    守护进程-锁-队列(生产者消费者模型)
    正则表达式不包含某个字符串写法
    正则表达式匹配不包含某些字符串的技巧
    08.参数估计_点估计
    07.编程理解中心极限定理
    05.编程理解小数和大数定律
    03.描述性统计代码
    02.描述统计 (descriptive statistics)
    oracle之三手工不完全恢复
    oracle之三手工完全恢复
  • 原文地址:https://www.cnblogs.com/miaozhenzhong/p/5930936.html
Copyright © 2011-2022 走看看