|
AdapterView是ViewGroup的一个子类,由一个适配器,和绑定到适配器的某些类型的数据组合而成。当你需要显示一些存储的数据时,AdapterView是非常有用的。
Gallery、ListView和Spinner便是AdapterView的例子,他们可以让你使用一些特殊格式的数据并且用一种特定的方式来显示这些数据。
ApapterView对象有两个主要职责:
@ 用数据来填充视图
@ 处理用户的操作事件
给视图填充数据
把数据插入到视图里,通常是由绑定适配器的AdapterView类来完成的,通常是从一些额外的存储中获得的数据,比如代码来提供或者从设备的数据库中查询的结果集。例如下面的代码:
1-使用一个已存在的View建立一个Spinner,然后绑定一个ArrayAdapter类来从本地资源里读取颜色列表。
2-建立另一个Spinner对象,绑定到一个SimpleCursorAdapter类,然后从手机的联系人列表读取联系人的名字。
// Get a Spinner and bind it to an ArrayAdapter that
// references a String array.
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);
// Load a Spinner and bind it to a data query.
private static String[] PROJECTION = new String[] {
People._ID, People.NAME
};
Spinner s2 = (Spinner) findViewById(R.id.spinner2);
Cursor cur = managedQuery(People.CONTENT_URI, PROJECTION, null, null);
SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this,
android.R.layout.simple_spinner_item, // Use a template
// that displays a
// text view
cur, // Give the cursor to the list adapter
new String[] {People.NAME}, // Map the NAME column in the
// people database to...
new int[] {android.R.id.text1}); // The "text1" view defined in
// the XML template
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s2.setAdapter(adapter2);
复制代码
注意:在PROJECTION字段中,你必须有一个People._ID列,否则会抛出一个异常。如果期间你修改了数据,那么需要调用一下notifyDataSetChanged()方法。这样视图便会做出相应更新。
处理用户的选择事件通过实现AdapterView.onItemClickListener监听器类,来获取用户的选择。 // Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id)
{
// Display a messagebox.
Toast.makeText(mContext,"You've got an event",Toast.LENGTH_SHORT).show();
}
};
// Now hook into our object and set its onItemClickListener member
// to our class handler object.
mHistoryView = (ListView)findViewById(R.id.history);
mHistoryView.setOnItemClickListener(mMessageClickedHandler);
复制代码 |
|