常見有Adapter的Layout有
- ListView
- GridView
Filling an adapter view with data
你可以藉由將AdapterView實例綁定一個Adapter來填充AdapterView如ListView或GridView,Adapter會從外部來源取出資料並為每一個輸入建立一個View。
Android提供許多Adapter的子類用來取出不同種類的資料,兩種最常見的Adapter是ArrayAdapter和SimpleCusorAdapter。
ArrayAdapter
當資料來源是陣列時使用ArrayAdapter。預設的情況下,ArrayAdapter藉由在每個陣列項目上呼叫toString()並把內容放入TextView中為每個陣列項目建立view。
例如,如果你有一個字串陣列想顯示在ListView上,利用建構子傳入對於每個字串的layout和字串陣列來初始化一個新的ArrayAdapter。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStringArray);
此建構子的參數包含
- 你的app的Context
- 供陣列中每個字串的Layout,包含了一個TextView
- 字串陣列
然後簡單地在ListView上呼叫setAdapter():
ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter);
可以複寫toString()來客製化每個陣列項目的外觀,或是可以為每個陣列項目建立不同於TextView的view(例如ImageView),繼承ArrayAadapter類別複寫getView()方法回傳想供給每個陣列項目的類型。
SimpleCursorAdapter
當資料來自Cursor時使用SimpleCursorAdapter。使用SimpleCursorAdapter時,必須指定一個layout給在Cursor的每一個row且每個columns應該被插入layout中的view。例如,想要建立一個人名和電話的列表,可以執行的一個查詢回傳Cursor,包含一個row為一個人,columns為人名和電話,接著建立一個字串陣列指定從Cursor中的哪個Column是想在Layout中的及建立一個整數陣列指定每個column相對應的view。
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; int[] toViews = {R.id.display_name, R.id.phone_number};
當你建立SimpleCursorAdapter實例,傳入layout、Cursor、這兩個陣列。
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person_name_and_number, cursor, fromColumns, toViews, 0); ListView listView = getListView(); listView.setAdapter(adapter);
如果你的應用程式在生命週期中,改變了油Adapter讀取的數據,應該呼叫notifyDataSetChanged()方法,這將通知你的view,數據已經改變,應該刷新本身。
Handing click events
可以藉由執行AdapterView.onItemClickListener介面回應在AdapterView中的每個項目。
// 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) { // Do something in response to the click } }; listView.setOnItemClickListener(mMessageClickedHandler);
沒有留言:
張貼留言