Android 用户界面---用AdapterView绑定数据(Binding to Data with AdapterView)

AdapterViewViewGroup的一个子类,它的子View是由绑定某些类型数据的Adapter类决定的。AdapterView有助于在需要的时候,在布局中显示被存储的数据(相对与资源字符串或可描画资源)。

GalleryListViewSpinnerAdapterView子类的例子,你能够使用它们绑定特定类型的数据,并且用某种方法显示它。

AdapterView对象有两个主要的职责:

1.  用数据填充布局

2.  处理用户的选择

用数据填充布局

通常,通过把AdapterView类绑定到一个Apater类把数据插入到布局中,Adapter从一个外部资源中获取数据(可能是由代码提供的一个数据列表,也可能是来自设备数据库中的一个查询结果)。

以下代码演示了填充数据的方法:

1.  创建一个既存的Spinner对象,并且把它绑定到一个新的ArrayAdapter对象,ArrayAdater对象从本地资源中读取颜色数组;

2.  创建另外一个Spinner对象,并且把它绑定到一个SimpleCursorAdapter对象,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);

注意,CursorAdapter对象使用字段映射中必须要有一个People._ID列,否则会发生异常。

如果在应用程序的生存期间,由Adapter读取的数据发生了改变,就应该调用notifyDataSetChanged()方法,这样就会通知被绑定的View,数据已经发生了改变,View应该刷新自己。

处理用户选择

通过把类的AdapterView.OnItemClicListener成员设置给一个监听器,就可以处理用户的选择,并且捕获选择的改变。如:

// 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);

你可能感兴趣的:(android,ListView,object,String,dropdown,binding)