Android Adapter的应用
AdapterView
Android中AdapterView用于显示数据.简单来说就是作为容器载入Adapter
AdapterView继承自ViewGroup,也属于容器类,代表的子类有ListView,GridView,Spinner,Gallery.
Adapter
Android中Adapter用于存储数据及数据的一些信息(显示方式等),代表的子孙类有ArrayAdapter,CursorAdapter,SimpleAdapter.
1.SimpleCursorAdapter(继承自CursorAdapter)
SimpleCursorAdapter的构造函数:
SimpleCursorAdapter(Context context, int itemLayout, Cursor c, String[] from, int[] to);
SimpleCursorAdapter把Cursor中的每一行都转换到子视图中,子视图使用itemLayout表示的XML资源文件作为布局.
另外,还需要提供一个字符串数组from,用于表示Cursor中要显示的列,而整数数组to则表示哪一列对应与布局中的哪一个控件.因此,from的长度和to的长度总是相等的.
2.ArrayAdapter
ArrayAdapter是Android最简单的适配器,适用于列表控件.
ArrayAdapter的构造函数:
ArrayAdapter(Context context, int itemLayout, Object[] data);
ArrayAdapter只需要一个子视图的布局和一组数据就可以了.每个子视图只显示一项数据.
ArrayAdapter还提供了其他构造函数,方便实现更加复杂的情况.
另外,ArrayAdapter还支持动态修改适配器中的数据,提供了add(),insert(),remove(),sort()等方法,在数据发生变化之后还应该调用ArrayAdapter的notifyDataSetChanged()方法来同步ArrayAdapter和对应的AdapterView.
Adapter与AdapterView的结合ListView
ListView垂直显示一组项,如果项数量超出屏幕显示区域,则可以使用滚动条.通常在ListActivity中使用ListView,ListActivity包含了一个ListView,提供了setListAdapter()方法来为ListView设置Adapter
public class AndroidAdapterActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); Cursor c ; CursorLoader loader = new CursorLoader(this, People.CONTENT_URI, null, null, null, People.NAME); c = loader.loadInBackground(); String[] cols = new String[]{People.NAME}; int[] view = new int[]{android.R.id.text1}; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, cols, view); setListAdapter(adapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ //Toast.makeText(AndroidAdapterActivity.this, "hello:"+position, 1000).show(); Uri selected = ContentUris.withAppendedId(People.CONTENT_URI, id); Intent intent = new Intent(Intent.ACTION_VIEW, selected); startActivity(intent); } }); }}