BaseAdapter ArrayAdapter SimpleCursorAdapter SimpleAdapter BaseExpandableListAdapter
2013-08-23 11:23
477 查看
BaseAdapter自定义适配器 public View getView(int position, View convertView, ViewGroup parent);内部类ViewHolder
ArrayAdapter
1. 适配器的作用是数据和视图之间的桥梁
2. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是String类型的,数据的数据类型还可以是其他的包括对象类型的
3. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
ArrayListDemo.this, android.R.layout.simple_list_item_1,
adapterData);
这段代码是创建一个数组适配器的代码,里面有三个参数,第一个参数是上下文,就是当前的Activity, 第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的字符串数组数据。listView会根据这三个参数,遍历adapterData里面的每一条数据,读出一条,显示到第二个参数对应的布局中,这样就形成了我们看到的listView.
SimpleAdapter
列表(ListView)、表格(GridView),这在手机应用上面肯定是少不了的,怎样实现比较复杂一点的界面呢,先看一下我的效果图。
这样布局的情况是最基本的,也是最常用的,网上关于这样的布局有多种版本的实现方法,但是有很多需要自己实现Adapter,那样子是比较复杂而且没有必要的,因为我们有简约而不简单的SimpleAdapter。
1. ListView
SimpleAdapter的核心代码:
listitem的Layout:
2. GridView
SimpleAdapter的核心代码:
griditem的Layout:
SimpleCursorAdapter
SimpleCursorAdapter adaper = new SimpleCursorAdapter(this,R.layout.listView_item,cursor,new String[]{Persons.COLUMN_NAME,Persons.COLUMN_PHONE},new int[]{R.id.tvName,R.id.tvPhone});
第一个参数 this,当前组件对象,通常是Activity类的当前对象
第二个参数。layout 当前行的布局文件的资源索引值。
第三个参数 c 列表中要显示的内容,Cursor中的字段名数组。
第四个参数表示要查找的列名,
第五个参数,就是要内容读取到那个控件里。
BaseExpandableListAdapter是ExpandableListAdapter的抽象基类,从一些数据中提供数据和视图给可折叠列表视图。
例子详解:
首先定义一个xml布局文件:
activity文件:
效果图:
ArrayAdapter
1. 适配器的作用是数据和视图之间的桥梁
2. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是String类型的,数据的数据类型还可以是其他的包括对象类型的
3. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
ArrayListDemo.this, android.R.layout.simple_list_item_1,
adapterData);
这段代码是创建一个数组适配器的代码,里面有三个参数,第一个参数是上下文,就是当前的Activity, 第二个参数是android sdk中自己内置的一个布局,它里面只有一个TextView,这个参数是表明我们数组中每一条数据的布局是这个view,就是将每一条数据都显示在这个view上面;第三个参数就是我们要显示的字符串数组数据。listView会根据这三个参数,遍历adapterData里面的每一条数据,读出一条,显示到第二个参数对应的布局中,这样就形成了我们看到的listView.
SimpleAdapter
列表(ListView)、表格(GridView),这在手机应用上面肯定是少不了的,怎样实现比较复杂一点的界面呢,先看一下我的效果图。
这样布局的情况是最基本的,也是最常用的,网上关于这样的布局有多种版本的实现方法,但是有很多需要自己实现Adapter,那样子是比较复杂而且没有必要的,因为我们有简约而不简单的SimpleAdapter。
1. ListView
SimpleAdapter的核心代码:
for (int i = 0; i < 10; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("PIC", R.drawable.pic); map.put("TITLE", "Test Title"); map.put("CONTENT", "Test Content"); contents.add(map); } SimpleAdapter adapter = new SimpleAdapter(this, (List<Map<String, Object>>) contents, R.layout.listitem, new String[] { "PIC", "TITLE", "CONTENT" }, new int[] { R.id.listitem_pic, R.id.listitem_title, R.id.listitem_content }); listView.setAdapter(adapter);
listitem的Layout:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight"> <ImageView android:id="@+id/listitem_pic" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:src="@drawable/pic" android:adjustViewBounds="true" android:padding="2dip" /> <TextView android:id="@+id/listitem_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/listitem_pic" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_above="@+id/listitem_content" android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" android:text="@+id/listitem_title" android:textSize="22px" /> <TextView android:id="@+id/listitem_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/listitem_pic" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:singleLine="true" android:ellipsize="marquee" android:text="@+id/item_content" android:textSize="14px" /> </RelativeLayout>
2. GridView
SimpleAdapter的核心代码:
for (int i = 0; i < 10; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("PIC", R.drawable.pic); map.put("TITLE", "Test Title"); contents.add(map); } SimpleAdapter adapter = new SimpleAdapter(this, (List<Map<String, Object>>) contents, R.layout.griditem, new String[] { "PIC", "TITLE" }, new int[] { R.id.griditem_pic, R.id.griditem_title, }); gridView.setAdapter(adapter);
griditem的Layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical"> <ImageView android:id="@+id/griditem_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> </ImageView> <TextView android:id="@+id/griditem_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="test"> </TextView> </LinearLayout>
SimpleCursorAdapter
SimpleCursorAdapter adaper = new SimpleCursorAdapter(this,R.layout.listView_item,cursor,new String[]{Persons.COLUMN_NAME,Persons.COLUMN_PHONE},new int[]{R.id.tvName,R.id.tvPhone});
第一个参数 this,当前组件对象,通常是Activity类的当前对象
第二个参数。layout 当前行的布局文件的资源索引值。
第三个参数 c 列表中要显示的内容,Cursor中的字段名数组。
第四个参数表示要查找的列名,
第五个参数,就是要内容读取到那个控件里。
BaseExpandableListAdapter是ExpandableListAdapter的抽象基类,从一些数据中提供数据和视图给可折叠列表视图。
例子详解:
首先定义一个xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ExpandableListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/ecpandable" /> </LinearLayout>
activity文件:
package cn.csdn.activity; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class ExpandableListViewActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.expandable_layout); /**BaseExpandableListAdapter实现了ExpandableListAdapter*/ ExpandableListAdapter adapter = new BaseExpandableListAdapter(){ /**----------定义数组-------------------------------------------------------------------*/ private int[] images = new int[]{ R.drawable.ic_launcher, R.drawable.stop, R.drawable.play }; private String[] armTypes = new String[]{ "神族","虫族","人族" }; private String[][] arms = new String[][]{ {"狂战士","龙骑士","黑暗圣堂"}, {"小狗","飞龙","自爆妃子"}, {"步兵","伞兵","护士mm"} }; /*===========组元素表示可折叠的列表项,子元素表示列表项展开后看到的多个子元素项=============*/ /**----------得到armTypes和arms中每一个元素的ID-------------------------------------------*/ //获取组在给定的位置编号,即armTypes中元素的ID @Override public long getGroupId(int groupPosition) { return groupPosition; } //获取在给定的组的儿童的ID,就是arms中元素的ID @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } /**----------根据上面得到的ID的值,来得到armTypes和arms中元素的个数 ------------------------*/ //获取的群体数量,得到armTypes里元素的个数 @Override public int getGroupCount() { return armTypes.length; } //取得指定组中的儿童人数,就是armTypes中每一个种族它军种的个数 @Override public int getChildrenCount(int groupPosition) { return arms[groupPosition].length; } /**----------利用上面getGroupId得到ID,从而根据ID得到armTypes中的数据,并填到TextView中 -----*/ //获取与给定的组相关的数据,得到数组armTypes中元素的数据 @Override public Object getGroup(int groupPosition) { return armTypes[groupPosition]; } //获取一个视图显示给定组,存放armTypes @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = getTextView();//调用定义的getTextView()方法 textView.setText(getGroup(groupPosition).toString());//添加数据 return textView; } /**----------利用上面getChildId得到ID,从而根据ID得到arms中的数据,并填到TextView中---------*/ //获取与孩子在给定的组相关的数据,得到数组arms中元素的数据 @Override public Object getChild(int groupPosition, int childPosition) { return arms[groupPosition][childPosition]; } //获取一个视图显示在给定的组 的儿童的数据,就是存放arms @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { LinearLayout ll = new LinearLayout(ExpandableListViewActivity.this); ll.setOrientation(0);//定义为纵向排列 ImageView logo = new ImageView(ExpandableListViewActivity.this); logo.setImageResource(images[groupPosition]);//添加图片 ll.addView(logo); TextView textView = getTextView();//调用定义的getTextView()方法 textView.setText(getChild(groupPosition,childPosition).toString());//添加数据 ll.addView(textView); return ll; } /**------------------自定义一个设定TextView属性的方法----------------------------------------------*/ //定义一个TextView private TextView getTextView(){ AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,40); TextView textView = new TextView(ExpandableListViewActivity.this); textView.setLayoutParams(lp); textView.setPadding(36, 0, 0, 0); textView.setTextSize(20); return textView; } /**-------------------其他设置-------------------------------------------------------------------*/ //孩子在指定的位置是可选的,即:arms中的元素是可点击的 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } //表示孩子是否和组ID是跨基础数据的更改稳定 public boolean hasStableIds() { return true; } }; /**使用适配器*/ ExpandableListView expandListView = (ExpandableListView) this.findViewById(R.id.ecpandable); expandListView.setAdapter(adapter); } }
效果图:
相关文章推荐
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android-ListView详解(SimpleAdapter,ArrayAdapter,BaseAdapter,OnItenClickListener,OnScrollListener)
- BaseExpandableListAdapter,二级列表的完全自定义(一)
- android BaseExpandableListAdapter 二级菜单适配器
- Android开发视频第二季之三:ExpandableListActivity和SimpleExpandableListAdapter的使用
- 可展开列表ExpandableListView—BaseExpandableListAdapter
- [转]Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- 了解SimpleExpandableListAdapter的构造函数
- BaseExpandableListAdapter的用法
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段(转)
- Android学习笔记——ExpandableListActivity与SimpleExpandableListAdapter
- Android学习笔记(十八)——ExpandableListActivity与SimpleExpandableListAdapter
- ListView之BaseExpandableListAdapter
- Android之ExpandableList扩展用法(基于BaseExpandableListAdapter)
- android ListView和带下拉列表的BaseExpandableListAdapter
- android 适配器Adpter的使用总结 之 BaseExpandableListAdapter
- android的adapter:ArrayAdapter,SimpleAdapter,SimpleCursorAdapter
- android:使用BaseExpandableListAdapter实现可折叠的列表
- android学习--ExpandableListActivity和SimpleExpandableListAdapter的使用