本文来自肥宝传说之路,引用必须注明出处!
ListView这几个Adapter究竟有什么不同,查了一下,其实主要是数据源不同,导致了不同的用法
ArrayAdapter 来源于字符串数组SimpleAdapter 来源是List<Map<String,?>>格式的数据
SimpleCursorAdapter 来源于数据库
SimpleAdapter 相对于ArrayAdapter复杂一点,但可以显示更丰富的内容。
再来看看代码吧:
package com.fable.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.*;
public class HelloWorldActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_world);
//绑定XML中的ListView,作为Item的容器
ListView listView = (ListView) findViewById(R.id.MyListView);
//生成动态数组,并且转载数据
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
for(int i=0;i<5;i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("title", "我是标题" + i);
map.put("text", "我是子标题" + i);
mylist.add(map);
}
//生成适配器,数组===》ListItem
SimpleAdapter mSchedule = new SimpleAdapter(this, //上下文,就是这个Activity
mylist,//数据来源
R.layout.my_list_item,//ListItem的XML实现
new String[] {"title", "text"},//动态数组与ListItem对应的子项
new int[] {R.id.ItemTitle,R.id.ItemText});//ListItem的XML文件里面的两个TextView ID
//添加并且显示
listView.setAdapter(mSchedule);
}
}
上文中可以看出,使用了自己的布局文件:
/HelloWorld/res/layout/activity_hello_world.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/MyListView">
</ListView>
</LinearLayout>
再来一个列表项的布局文件:/HelloWorld/res/layout/my_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="wrap_content"
android:id="@+id/MyListItem"
android:paddingBottom="3dip"
android:paddingLeft="10dip">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/ItemTitle"
android:textSize="30sp">
</TextView>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/ItemText">
</TextView>
</LinearLayout>
===================================================================================================================
今天本来还想说说SimpleCursorAdapter。在网上找了一些例子,放进Eclipse里面,发现被弃用了。
认真看一下,原来是这个构造函数被改了。现在推荐用这个了,多了个flags
SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to,int flags)
不过没关系,我是新手,一样是新接触的。
context 上下文信息,传this进去就行了。
layout 布局文件,我们使用系统提供简单的格式吧
flags是一个标识,标识当数据改变调用onContentChanged()的时候,是否通知ContentProvider数据的改变,如果无需监听ContentProvider的改变,则可以传0。对于SimpleCursorAdapter适配器的Cursor的改变,可以使用SimpleCursorAdapter.swapCursor(Cursor)方法,它会与旧的Cursor互换,并且返回旧的Cursor。
很多内容都被弃用,改了之后,发现startMangingCursor的方法也被弃用了,怎么找都找不到,或者说找到的方法我看不懂。
所以决定暂时放下,以后补充,大家学习Android的时候,千万别想着把所有东西都搞清楚,再去实际动手,这是没有意义的。到动手的时候照样什么也不会。遇到技术问题去网上找,是在找不到,或者像现在这样访问数据库的问题太高级了,不是一个还没入门的人能做到的。所以暂时放下是一个不错的选择。继续往前走吧,少年!