Android应用开发学习笔记之列表视图
2013-08-01 16:58
501 查看
作者:刘昊昱
博客:http://blog.csdn.net/liuhaoyutz
列表视图我们会经常用到,可以通过两种方式来创建列表视图,一种方式是直接使用ListView组件创建,另一种方式是通过让Activity继承ListActivity实现。
指定ListView组件的内容有两种方法,一是通过在布局文件中指定数组资源,另一种是通过创建适配器。
下面来看一个使用ListView组件创建列表视图的例子,其内容是通过在布局文件中指定数组资源实现的。该程序运行效果如下:
主布局文件main.xml内容如下:
数组资源定义在BrandArray.xml文件中,其内容如下:
主Activity文件内容如下:
上面的例子中,ListView组件的内容是通过数组资源指定的,下面看一个通过创建适配器指定ListView组件内容的例子,该程序运行效果如下图所示:
该程序主布局文件main.xml内容如下:
主Activity文件内容如下:
以上是通过ListView组件创建的列表视图,我们前面说过,还有一种创建列表视图的方法是通过让Activity继承ListActivity实现。下面我们来看一个例子,该程序运行效果如下图所示:
该程序的主Activity文件内容如下:
在这个程序中,MainActivity继承了ListActivity,所以本身就具有列表视图的属性。需要注意的一点是,不能像以前的程序那样调用setContentView()方法,如果调用了这个方法,运行时会出错。
最后,我们来看一下怎样创建带图标的列表视图。下图是该程序的运行效果:
这个程序需要用到SimpleAdapter类,下面是Android官方网站上到该类的一个介绍:
An easy adapter to map static data to views defined in an XML file. You can specify the data backing the list as an ArrayList of Maps. Each entry in the ArrayList corresponds to
one row in the list. The Maps contain the data for each row. You also specify an XML file that defines the views used to display the row, and a mapping from keys in the Map to specific views.
来看一下SimpleAdapter类的构造函数:
结合以上定义,现在来看一下我们的示例程序的主Activity文件的实现,其内容如下:
主布局文件main.xml的内容如下:
另外,根据SimpleAdapter类的要求,我们需要创建一个描述每一行布局的xml文件,这里命名为items.xml,其内容如下:
博客:http://blog.csdn.net/liuhaoyutz
列表视图我们会经常用到,可以通过两种方式来创建列表视图,一种方式是直接使用ListView组件创建,另一种方式是通过让Activity继承ListActivity实现。
指定ListView组件的内容有两种方法,一是通过在布局文件中指定数组资源,另一种是通过创建适配器。
下面来看一个使用ListView组件创建列表视图的例子,其内容是通过在布局文件中指定数组资源实现的。该程序运行效果如下:
主布局文件main.xml内容如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:entries="@array/brands" android:layout_height="wrap_content" android:layout_width="match_parent"/> </LinearLayout>
数组资源定义在BrandArray.xml文件中,其内容如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="brands"> <item>苹果</item> <item>三星</item> <item>HTC</item> <item>诺基亚</item> <item>联想</item> <item>华为</item> <item>魅族</item> <item>索尼</item> <item>夏新</item> <item>小米</item> <item>天语</item> <item>中兴</item> <item>其它</item> </string-array> </resources>
主Activity文件内容如下:
package com.liuhaoyu; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ListView listView=(ListView)findViewById(R.id.listView); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id) { String result = parent.getItemAtPosition(pos).toString(); Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); } }); } }
上面的例子中,ListView组件的内容是通过数组资源指定的,下面看一个通过创建适配器指定ListView组件内容的例子,该程序运行效果如下图所示:
该程序主布局文件main.xml内容如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_height="wrap_content" android:layout_width="match_parent"/> </LinearLayout>
主Activity文件内容如下:
package com.liuhaoyu; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 通过在代码中定义数组来创建适配器. String[] brand=new String[]{"苹果","三星","HTC","诺基亚","联想","华为","魅族","索尼","夏新","小米","天语","中兴","其它"}; ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,brand); // 也可以使用数组资源来创建适配器,而不是象上面那样在代码中定义 数组。 // ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( // this, R.array.brands,android.R.layout.simple_list_item_1); final ListView listView=(ListView)findViewById(R.id.listView); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id) { String result = parent.getItemAtPosition(pos).toString(); Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); } }); } }
以上是通过ListView组件创建的列表视图,我们前面说过,还有一种创建列表视图的方法是通过让Activity继承ListActivity实现。下面我们来看一个例子,该程序运行效果如下图所示:
该程序的主Activity文件内容如下:
package com.liuhaoyu; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 通过在代码中定义数组来创建适配器. String[] brand=new String[]{"苹果","三星","HTC","诺基亚","联想","华为","魅族","索尼","夏新","小米","天语","中兴","其它"}; ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,brand); // 也可以使用数组资源来创建适配器,而不是象上面那样在代码中定义 数组。 // ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( // this, R.array.brands,android.R.layout.simple_list_item_1); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); String result = l.getItemAtPosition(position).toString(); Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); } }
在这个程序中,MainActivity继承了ListActivity,所以本身就具有列表视图的属性。需要注意的一点是,不能像以前的程序那样调用setContentView()方法,如果调用了这个方法,运行时会出错。
最后,我们来看一下怎样创建带图标的列表视图。下图是该程序的运行效果:
这个程序需要用到SimpleAdapter类,下面是Android官方网站上到该类的一个介绍:
An easy adapter to map static data to views defined in an XML file. You can specify the data backing the list as an ArrayList of Maps. Each entry in the ArrayList corresponds to
one row in the list. The Maps contain the data for each row. You also specify an XML file that defines the views used to display the row, and a mapping from keys in the Map to specific views.
来看一下SimpleAdapter类的构造函数:
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
context | The context where the View associated with this SimpleAdapter is running |
data | A List of Maps. Each entry in the List corresponds to one row in the list. The Maps contain the data for each row, and should include all the entries specified in "from" |
resource | Resource identifier of a view layout that defines the views for this list item. The layout file should include at least those named views defined in "to" |
from | A list of column names that will be added to the Map associated with each item. |
to | The views that should display column in the "from" parameter. These should all be TextViews. The first N views in this list are given the values of the first N columns in the from parameter |
package com.liuhaoyu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView listview = (ListView) findViewById(R.id.listView); int[] imageId = new int[] { R.drawable.image01, R.drawable.image02, R.drawable.image03, R.drawable.image04, R.drawable.image05, R.drawable.image06, R.drawable.image07, R.drawable.image08, R.drawable.image09, R.drawable.image10 }; String[] title = new String[] { "时钟", "E-mail", "音乐", "电话", "日历", "游戏", "YouTube", "地图", "Google+", "通讯录" }; List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < imageId.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); // 实例化Map对象 map.put("image", imageId[i]); map.put("title", title[i]); listItems.add(map); } SimpleAdapter adapter = new SimpleAdapter(this, listItems, R.layout.items, new String[] { "title", "image" }, new int[] {R.id.title, R.id.image }); listview.setAdapter(adapter); } }
主布局文件main.xml的内容如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_height="wrap_content" android:layout_width="match_parent"/> </LinearLayout>
另外,根据SimpleAdapter类的要求,我们需要创建一个描述每一行布局的xml文件,这里命名为items.xml,其内容如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:paddingRight="10px" android:paddingTop="20px" android:paddingBottom="20px" android:adjustViewBounds="true" android:maxWidth="72px" android:maxHeight="72px" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10px" android:layout_gravity="center" android:id="@+id/title" /> </LinearLayout>
相关文章推荐
- Android应用开发学习笔记之网格视图
- Android应用开发学习笔记之画廊视图
- Android应用开发学习笔记之列表选择框
- Android应用开发学习之列表视图
- Android高级应用开发(基础篇) - stage9 - 学习笔记
- Android应用开发学习笔记之图片切换器
- 学习笔记3-开发与运行(卸载)第一个ANDROID应用
- Android应用开发学习笔记之表格布局
- Android应用开发学习笔记之AlertDialog对话框
- Android高级应用开发(基础篇) - stage5 - 学习笔记
- Android应用开发学习笔记(2)应用开发初步体验
- Android应用开发学习笔记之ContentProvider
- android移动应用开发学习笔记(五)——模拟qq登陆界面
- Android应用开发学习笔记之事件处理
- Android开发总结笔记 ListView(列表视图[上]) 1-3-1
- Android高级应用开发(基础篇) - stage10 - 学习笔记
- Android高级应用开发(基础篇) - stage1 - 学习笔记
- Android开发学习笔记(七)Android应用界面编程 Radio/Check/DataPicker学习
- Android开发学习笔记(八)Android应用界面编程 ImageView学习
- Android应用开发学习笔记之绘图