android开发之路08(ListView&Adapter),androidlistview
ListView控件介绍:用于将数据库中的数据或者网络中的数据通过列表的形式显示出来;ListView采用MVC模式将前端显示和后端数据进行分离。 也就是说,ListView控件在装载数据时并不是直接使用ListView.add或者类似的方法添加数据,而是需要指定一个Adapter对象。该对象相当于MVC模式中的C(控制器),ListView相当于MVC模式中的V(视图),用于显示数据。为ListView提供数据的List或数组相当于MVC模式中的M(模型)在ListView控件中通过Adapter对象获得需要显示的数据,在创Adapter对象时需要指定要显示的数据(List或数组对象),因此,要显示的数据与ListView之间通过Adapter对象进行连接,同时又互相独立,也就是说,ListView只知道显示的数据来自Adapter,并不知道这些数据是来自List还是数组。
1.ListView应用实例(这里是在java代码中操作listview对象的):
public class MyListActivity extends ListActivity{
//定义一个字符串数组,代表我们的数据源
private static final String[] COUNTRIES=new String[]{"中国","法国","美国","德国","日本","朝鲜","印度"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//把我们需要展现的数据展现到ListView上
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,COUNTRIES));
//通过getListView()方法获取listview对象
ListView lv=getListView();
lv.setTextFilterEnabled(true);
Log.e("MyListActivity", "listview界面产生了");
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//通过getText()方法获取用户选择的ListView中的选项信息
Log.e("MyListActivity", "列表选项被点击了,看看会出现什么");
Toast.makeText(getApplicationContext(), ((TextView)view).getText(), Toast.LENGTH_LONG).show();
}
});
}
}
列表项xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp">
</TextView>
Java代码①:
public class MyActivity extends Activity{
private ListView listview;
private ArrayAdapter<String> adapter;
//定义一个数据源
private List<String> data=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取数据源
data=MyDataSource.getDataSource();
adapter=new ArrayAdapter<String>(this, R.layout.list_item, data);
listview=(ListView) findViewById(R.id.listview);
//将数据源通过adapter显示到listview视图上
listview.setAdapter(adapter);
}
}
Java代码②:
public class MyDataSource {
public MyDataSource() {
super();
}
public static List<String> getDataSource(){
List<String> list=new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("广州");
list.add("湖北");
list.add("湖南");
list.add("深圳");
list.add("西安");
return list;
}
}
布局文件activity_main.xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_world" />
</RelativeLayout>
列表项list_item.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp">
</TextView>
2.ListView应用实例:
在上面的两个例子中我们用的都是ArrayAdapter(数组适配器),这个适配器显示的数据源比较单一;而SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等;
下面我们就来看看如何使用SimpleAdapter
①MainActivity.java
public class MainActivity extends Activity {
private ListView mListView;
private SimpleAdapter mSimpleA