android的适配器:将数据绑定到视图上去,以何种方式来展示显示的格式。其作用其实是连接数据和AdpterView的桥梁。
理清楚 数据源,AdpterView,适配器之间的关系
AdpterView:Gallery,ListView和Spinner,Gridview等是AdapterView的子类。
通常的,我们有使用三个适配器:ArrayAdpter, SimpleAdpter,SimpleCursorAdpter.它们都继承自BaseAdpter.
重点关心它们的数据源
ArrayAdpter:实现简单的listview的数据绑定,默认情况下绑定每个对象的toString值到layout中预先定义好的Textview上。注意这个参数的顺序和意义就行了,this表示上写文。ArrayAdapter<String>(this,Android.R.Layout.Simple_List_Item_1,sex);这边注意一下,继承了listactivity,该activity只能有一个listview,已经封装了一个listview在其中,所以可以不需要setcontview()方法来绑定布局。关于listactivty的用法读者可以找点资料看看。
public class Example extends ListActivity{ String[] sex = new String(){"男",“女”}//数据源 ArrayAdapter<String> adapter;//数组适配器,用的是泛型 public voidonCreate(Bundle SavedInstanceState){ super.onCreate(SavedInstanceStat); //在对适配器初始化的时候,顺便把数据源装载到适配里, //this.Android.R.Layout.Simple_List_Item_1这句话的意思是将数据源以系统定义好的样式放 到适配器里. adapter=newArrayAdapter<String>(this,Android.R.Layout.Simple_List_Item_1,sex); this.setAdapter(adapter);//这是一个控件类,所以可以直接将适配器绑定到本身对象中。 } }
SimpleAdpter:notifyDataSetChange()可以刷新adpterview上的数据,相当于html中页面重加载一样。这了也注意SimpleAdapter(this, mylist,//数据来源 R.layout.my_listitem,// 每行的布局//动态数组与ListItem对应的子项。可以通过对listview.setOnItemClickListener来设置对每列的监听事件。
new String[]{"ItemTitle", "ItemText"}, //ListItem的XML文件里面的两个TextView ID new int[] {R.id.ItemTitle,R.id.ItemText});
List作为数据源,填充的是SimpleAdapter ListView list = (ListView)findViewById(R.id.MyListView); //生成动态数组,并且转载数据 ArrayList<HashMap<String, String>> mylist = newArrayList<HashMap<String, String>>(); for(int i=0;i<30;i++) { HashMap<String, String>map = new HashMap<String, String>(); map.put("ItemTitle","This is Title....."); map.put("ItemText","This is text....."); mylist.add(map); } //生成适配器,数组===》ListItem SimpleAdapter mSchedule = new SimpleAdapter(this, //没什么解释 mylist,//数据来源 R.layout.my_listitem,//ListItem的XML实现 //动态数组与ListItem对应的子项 new String[]{"ItemTitle", "ItemText"}, //ListItem的XML文件里面的两个TextView ID new int[] {R.id.ItemTitle,R.id.ItemText}); //添加并且显示 list.setAdapter(mSchedule); }
SimpleCursorAdpter:
SimpleCursorAdapter一般主要用于数据库,它的数据来源一般都是数据库查询得到的Cursor 我们来看下面的例子: String uriString = “content://contacts/people/”; Cursor myCursor =managedQuery(Uri.parse(uriString), null, null, null, null); String[] fromColumns = new String[]{People.NUMBER, People.NAME}; int[] toLayoutIDs = new int[] {R.id.nameTextView, R.id.numberTextView}; SimpleCursorAdapter myAdapter; myAdapter=newSimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor,fromColumns, toLayoutIDs);//传入当前的上下文、一个layout资源,一个游标和两个数组:一个包含使用的列 //的名字,另一个(相同大小)数组包含View中的资源ID,用于显示相应列的数 据值。 myListView.setAdapter(myAdapter); 我们把一个游标绑定到了ListView上,并使用自定义的layout显示来显示每一个Item。