Android UI高级控件之SimpleAdapter
来源:互联网 发布:java中的接口和抽象类 编辑:程序博客网 时间:2024/05/16 07:23
在ArrayAdapter中,数据源一般是数组,而在SimpleAdapter中,数据源是List<Map<String,Object>>,这里不再对一些定义进行描述,根据下面的例子,我相信可以更好得掌握它的用法。
一.构造函数:public SimpleAdapter (Context context, List<?extends Map<String, ?>> data, int resource, String[] from, int[] to);第一个参数:上下文对象;第二个参数:数据源,第三个参数:适配器控件中每个条目对应的布局文件;第四个参数:数据源中Map集合中的key的集合;
第五个参数:布局文件中控件Id的集合。
二.我们还是以ListView和SimpleAdapter为例,了解它的用法;
1.在布局文件中添加一个ListView控件,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView_persons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textView1"
android:layout_toRightOf="@+id/textView1" >
</ListView>
</RelativeLayout>
2.由于这里使用SimpleAdapter,而它的第三个参数是需要一个布局文件,这个布局文件指定了他每个条目的样式,所以,在res下的layout中新建一个布局文件,名为layout_item,并设置某些属性,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="106dp"
android:layout_marginTop="15dp"
android:text="姓名" />
<TextView
android:id="@+id/textView_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView_name"
android:layout_below="@+id/imageView_head"
android:text="年龄" />
<ImageView
android:id="@+id/imageView_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView_name"
android:layout_marginLeft="31dp"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
3.给ListView中添加数据,用setAdapter(),并添加点击事件,这在里,我们根据它的提示,需要什么,我们就给它什么,所有的代码如下:
public class MainActivity extends Activity {
private List<Map<String,Object>> data;//声明数据源,并在getData()方法中给它赋值
private ListView listView01;
private SimpleAdapter adapter=null;//声明SimpleAdapter。
@Override
protected void onCreate(Bundle savedInstanceState) {
data=getData();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView01=(ListView) findViewById(R.id.listView_persons);
adapter=getAdapter();//为了代码结构清晰,所以提取成一个方法
listView01.setAdapter(adapter);//给ListView中添加数据,这里需要一个Adapter,所以我们new一个Adapter
listView01.setOnItemClickListener(new OnItemClickListener() {
@Override
/**
* 添加点击事件
* @param parent:事件源,当前的适配器控件;
* @param view:当前的条目,用户点击了哪个条目,哪个就是view
* @param position:当前条目的索引号
* @param id:当前条目多对应的行数
* @param
*/
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//1.根据数据源获取数据
/*Map<String, Object> map=data.get(position);
String name=map.get("name").toString();*/
//2.根据适配器对象获取数据
//String name=((Map<String,Object>)adapter.getItem(position)).get("name").toString();
//3.根据适配器控件获取
//String name=((Map<String,Object>)parent.getItemAtPosition(position)).get("name").toString();
//4.根据形参view获取
TextView tv=(TextView) view.findViewById(R.id.textView_name);
String name=tv.getText().toString();
Toast.makeText(getApplicationContext(), "name="+name, Toast.LENGTH_SHORT).show();
}
});
}
private List<Map<String, Object>> getData() {
data=new ArrayList<Map<String,Object>>();
/**
* 在drawable文件夹中的图片,由于名字是按顺序的,所以在R文件中生成的id也是有规律的,每次都加1,
* 所以可以用for循环,添加到Map集合中
*/
for(int i=0;i<6;i++){
Map<String,Object> maps=new HashMap<String,Object>();
maps.put("header",R.drawable.tou1+i );
maps.put("name","张三"+i);
maps.put("age",21+i);
data.add(maps);
}
return data;
}
/**
*
* @return
*/
private SimpleAdapter getAdapter() {
adapter=new SimpleAdapter(this, //上下文对象
data, //数据源
R.layout.activity_layout,//当前控件中每个条目对应的布局文件
new String[]{"header","name","age"}, //数据源中Map集合中的Key值的集合
new int[]{R.id.imageView_head,R.id.textView_name,R.id.textView_age});//当前控件中每个条目对应的布局文件中控件的id的集合
return adapter;
}
}
4.完成后,运行效果如下:如果做到这一步,说明最基本的用法已经掌握了,随着以后和其他知识的结合,慢慢的就融会贯通了!
- Android UI高级控件之SimpleAdapter
- Android UI高级控件之ArrayAdapter
- Android UI高级控件之ArrayAdapter
- Android UI高级之自定义控件
- Android UI高级控件之ViewHolder
- Android常见控件之SimpleAdapter和ListView
- Android常见控件之SimpleAdapter和List
- Android常用控件之SimpleAdapter和ListView
- Android常见控件之SimpleAdapter和List
- Android控件之ListView与SimpleAdapter
- Android基础 | 控件基础 | Listview之SimpleAdapter
- Android的Ui高级控件
- Android UI 设计:ListView 控件与 SimpleAdapter 适配器
- Android UI高级控件之自定义Adapter(继承BaseAdapter)
- Day4.2--Android高级UI控件之AutoCompleteTextView的使用
- Day4.3--Android高级UI控件之ProgressBar的使用
- Android UI学习之ListView(使用ArrayAdapter和SimpleAdapter)
- Android之UI控件
- python中的类属性和实例属性
- Excel Spreadsheet 转换web HTML 5 展示
- 经典api接口测试工具
- 转载的关于iOS架构的东西
- iOS项目开发实战——CoreLocation地理编码和反地理编码
- Android UI高级控件之SimpleAdapter
- 韩顺平 java 第十二讲 多态
- Linux中的程序和进程,PID和PPID
- ios9兼容系列之解决iPad提交报错“iPad Multitasking support requires launch story board in bundle '”
- 一张图说明操作系统的主要结构功能
- 关于开启XAMPP的Apache服务报错端口被占用的解决方法
- java基本类型与包装类型
- 逆序输出回形数组
- Navicat for Oracle 表名不存在 ORA00903