【记录】ListView的学习

本文详细介绍了一个基于Android平台的列表应用程序的实现过程,包括主Activity设置、列表视图创建、自定义列表适配器、事件处理及ListActivity使用等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直忘了贴出来,又要从头看一遍,感觉这个比较有用哦。

前几天一直在做一个最短路径的JAVA桌面程序(拯救007),学到很多,Android和JAVA不分家嘛~

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、选定主Activity

总共有5个Activity,其中一个是主页面。
(总结构如图所示)


ActivityMain中对Main.xml布局文件进行了关联,从中获得了4个Button及相关的单击事件。
在AndroidManifest.xml中,对5个Activity进行声明,并确定主Activity。

确定主Activity的代码:
<activity android:name=".ActivityMain"
			android:label="Android中的列表演示">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category
					android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
(从intent-filter中定义了里面的动作和分类)

二、单击第一个按钮,进入Activity1

Activity1.java中创建页面的代码如下:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listView = new ListView(this);
	listView.setAdapter(new ArrayAdapter<String>(this,
		android.R.layout.simple_list_item_single_choice, data));	
        listView.setItemsCanFocus(true);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
	setContentView(listView);
    }


解释如下:
1、新建一个listView(列表)

2、setAdapter()让ListView和ArrayAdapter进行绑定

3、ListAdapter是列表适配器,是data和ListView的桥梁,起适配作用。ArrayAdapter、SimpleAdapter都ListAdapter的子类,

4、ArrayAdapter:第一个参数是Context,上下文的引用;第二个参数是列表的布局(可以是系统的R文件,也可以是用户自己的创建的R文件);第三个参数是data,可以是字符串数组、Cursor。

5、系统提供的列表布局方式:

(1)Android.R.layout.simple_list_item_1,列表中每一项只有一个TextView。

(2)Android.R.layout.simple_list_item_2,列表中每一项有两个TextView。

(3)Android.R.layout.simple_list_item_single_choice,列表中每一项有一个TextView,且可以被选择。


如图所示:


三、用户可定制性列表适配器-----SimpleAdapter

1、SimpleAdapter是ArrayList和ListView的桥梁。其构造函数如下:
SimpleAdapter(Context context, List <? extends Map <String, ?>> data, int resource, String[] from, int[] to)
(1)Context context,就是当前的上下文通常写this。
(2)Map <String, ?>> data,就是要绑定的数据。
(3) resource参数值就指定的ListView的列表项的布局。
(4)from参数是Map对象的key。
(5)to表示组件的id。
2、下面看本例中的代码
(1)数据的准备(data)
private void PrepareData() {
		data = new ArrayList<Map<String, Object>>();
		Map<String, Object> item;
		item = new HashMap<String, Object>();
		item.put("姓名", "张三小朋友");
		item.put("性别", "男");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "王五同学");
		item.put("性别", "男");
		data.add(item);
		item = new HashMap<String, Object>();
		item.put("姓名", "小李师傅");
		item.put("性别", "女");
		data.add(item);
	}
(2)自定义的layout:

(3)将列表适配器加入到列表中:
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		PrepareData();
		setContentView(R.layout.list3);
		 SimpleAdapter adapter = new SimpleAdapter(this, data,
				 android.R.layout.simple_list_item_2, new String[] { "姓名","性别" },
				 new int[] { android.R.id.text1 , android.R.id.text2});
		setListAdapter(adapter);
		
	}

效果图如下:



感觉并没有系统提供的布局--Android.R.layout.simple_list_item_2好看:


四、事件

1、对List的单击事件

代码如下:
OnItemClickListener listener = new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view, int position,
					long id) {
				setTitle(parent.getItemAtPosition(position).toString());
			}
		};
		listView.setOnItemClickListener(listener);

(1)注册了一个监听器,onItemClick是一个回调函数,用户单击后,系统会自动调用此函数。
(2)第一个参数为被单击的ListView;第二个参数View,为被选中的那一项;第三个参数position,为选中的View;第四个参数为被选中行的id。
(3)最后一句将监听器注册到listView中。



2、对List的选择事件
代码如下:
		OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener(){

			@Override
			public void onItemSelected(AdapterView<?> parent, View arg1,
					int position, long arg3) {
				setTitle("您选中的软件是:  "+parent.getItemAtPosition(position).toString());
				
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				setTitle("");
				
			}
			
		};
		listView.setOnItemSelectedListener(itemSelectedListener);

结果如图所示:




五、ListActivity的使用

每一个ListActivity都与一个布局文件相关联。布局文件的大体模式参考如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
    android:layout_height="wrap_content">
	<ListView android:id="<span style="font-family: Arial, Helvetica, sans-serif;">@id/android:list</span>"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
  	<TextView android:id="@id/android:em<span style="font-family: Arial, Helvetica, sans-serif;">pty"</span>
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="对不起,没有数据显示"/>      
</LinearLayout>
这个布局文件中必须定义一个ListView,且id必须为:@id/android:list。
在ListActivity中不用注册监听器,而是直接重写onListItemClick方法就可以进行事件处理。

将String data={ },结果如下:




------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
昨晚eclipse突然报错,胡乱建了一个项目又删掉就又好了。真是奇怪。
觉得自己最近状态很不好,上课不听,自己看书也看不进去,要克服拖延、懒惰,自律一些,晚上早点睡。
加油,还有47天放假。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值