`
苗振忠
  • 浏览: 59544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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)


分享到:
评论

相关推荐

    android开发Adapter详解

    ### Android开发Adapter详解 #### 一、Adapter概念与作用 在Android开发中,Adapter是一种用于连接数据源和视图组件的重要桥梁。它主要用于处理数据集合与列表视图之间的交互,确保视图能够正确且高效地展示数据。...

    android adapter详解

    Android Adapter 详解 Android Adapter 是 Android 开发中一个重要的组件,负责将数据绑定到用户界面中。今天,我们将深入探讨 Android Adapter 的原理和实现方式。 什么是 Android Adapter? Android Adapter 是...

    Android Adapter详解(2)

    这篇博客“Android Adapter详解(2)”可能会深入探讨Adapter的工作原理、如何使用以及一些常见问题的解决方法。由于没有直接提供博客的具体内容,我将根据常规的Adapter知识进行详细解释。 Adapter是Android中用于将...

    Android adapter详解

    适配器(Adapter)在Android开发中是一个非常重要的概念,它主要用于处理数据源和UI组件之间的数据流动和转换。适配器作为数据和UI之间的桥梁,能够把后端数据适配到前端的显示界面,使之能够按照一定的格式显示出来...

    Android之Adapter用法总结

    **Adapter** 是 Android 开发中连接后端数据和前端视图的一个关键组件。它作为数据和用户界面(UI)之间的桥梁,在Android开发中扮演着极其重要的角色。尤其是在常见的视图组件如 `ListView`, `GridView` 等地方,...

    Android listview与adapter详解及实例代码

    在Android中,Adapter是连接数据源和视图控件(如ListView)的关键。 常见的Adapter类型有ArrayAdapter、SimpleAdapter、SimpleCursorAdapter以及BaseAdapter等。ArrayAdapter适用于绑定数组数据,SimpleAdapter...

    Android Adapter里面嵌套ListView实例详解

    Android Adapter里面嵌套ListView实例详解是Android开发中的一种常见设计,即在一个ListView中嵌套另一个ListView。这种设计可以实现复杂的列表显示,但是需要特殊处理以确保正确显示。 Android Adapter里面嵌套...

    Android各种控件详解

    在Android应用开发中,构建用户界面是至关重要的一步,它涉及到与用户交互的各种控件。以下是对Android中常见控件的详细解释: 1. **文本框(TextView)**:TextView用于展示静态文本,可以在Activity中直接创建...

    android优化技术详解

    Android 优化技术详解 Android 优化技术是指通过合理的编程和设计来提高 Android 应用程序的性能、内存和用户体验的一系列技术。下面是 Android 优化技术的详细解释: UI 布局优化 Android 的 UI 界面布局的优化...

    Android ViewPager使用详解

    **Android ViewPager 使用详解** ViewPager是Android开发中一个非常重要的组件,它允许用户通过左右滑动来切换不同的页面,常用于实现应用的滑动导航或展示多个相似内容的页面。在本篇文章中,我们将深入探讨...

    android Adapter教程

    #### 一、Adapter 在 Android 开发中的核心作用 在 Android 开发中,Adapter 扮演着至关重要的角色,它作为桥梁,连接了后端数据与前端界面(UI)。具体而言,Adapter 负责将数据集中的数据转换成可以在 UI 组件...

    Android中Listview详解

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据的列表形式。它可以根据数据的长度自动调整显示,提供良好的用户体验。以下是对ListView组件及其使用的详细解释。 首先,ListView的构成包含三...

    android核心技术与实例详解光盘源代码3

    在本资源中,我们聚焦于Android开发的核心技术和实例解析,主要涵盖了光盘源代码的第13至第18章。这些章节深入探讨了Android应用开发的关键方面,为开发者提供了丰富的学习材料。以下是对各章节内容的详细解读: 第...

    Android 蓝牙API详解

    **Android蓝牙API详解** 在Android平台上,蓝牙技术是设备间通信的重要途径,广泛应用于数据传输、设备配对、物联网(IoT)等场景。Android提供了丰富的蓝牙API,使得开发者能够轻松实现蓝牙功能,包括经典蓝牙...

    《Android应用开发详解》配套光盘之源代码

    1. **UI设计**:Android应用的用户界面是与用户交互的窗口,源代码中包含了各种布局管理器(如LinearLayout、RelativeLayout、GridLayout、ConstraintLayout)的使用示例,以及自定义View和Adapter的实现,这些都是...

    Android_布局详解【图文】

    本篇将详细讲解Android中的五种主要布局:线性布局(Linear Layout)、相对布局(Relative Layout)、表格布局(Table Layout)、网格布局(GridView)以及列表布局(ListView)。 1. **线性布局(Linear Layout)*...

    Android 应用开发详解的源码(中)

    在本资源中,"Android 应用开发详解的源码(中)" 提供了针对初学者的Android应用开发实例,涵盖了从第七到第十二部分的知识点。这些源码旨在帮助学习者深入理解Android应用程序的设计与实现。以下是这些知识点的详细...

    Android项目开发详解 翟大昆版

    在翟大昆版的《Android项目开发详解》代码中,读者可以找到实际项目案例,了解如何将理论知识应用于实践中。通过分析和运行这些代码,开发者不仅可以掌握基本的界面设计和Activity管理,还能了解如何组织项目结构,...

    Android应用开发详解教材源码(下册)--实例源码

    在本资源中,"Android应用开发详解教材源码(下册)--实例源码" 提供了8个单元共计30多个实例的源代码,旨在帮助开发者深入理解Android应用程序的开发过程。这些实例覆盖了Android开发中的核心概念、组件以及最佳...

Global site tag (gtag.js) - Google Analytics