android之listview使用方法(一)

android中listview控件可以说是非常重要的控件,几乎每一个应用都会使用到它,例如游戏中的积分榜,音乐播放列表。但是,重要就意味着使用起来会有点繁琐,今天就来总结一下listview的使用步骤吧。

首先,使用listview要明确三个要素:

1.数据

2.适配器adapter

3.listview

然后,根据适配器的种类,我们可以把listview分成三种,有ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而最后一种是专门与数据库连接用的,今天先不讨论。

1.arrayadapter,这种是最简单的,不仅操作简单,显示也最简单。我们只需指定一个string数组就可以了,代码如下:

ListView buttonListView = (ListView)this.findViewById(R.id.typeListView);
		String[] buttonArr = { mContext.getString(R.string.free_note),
				mContext.getString(R.string.line_note),
				mContext.getString(R.string.rect_note),
				mContext.getString(R.string.triangle_note),
				mContext.getString(R.string.round_note),
				mContext.getString(R.string.highlight_note)
				 };
		ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(mContext,
				android.R.layout.simple_expandable_list_item_1, buttonArr);
		buttonListView.setAdapter(arrayAdapter);

2.simpleAdapter,这是使用最多的方式,因为你可以订制每个item的样式,较为繁琐。

步骤如下:

(1)创建一个List<Map<String,Object>>实例,再往该list里面添加一个个的HashMap<String,Object>,这个就是listview所有的数据,代码如下:

final List<Map<String, Object>> filterItems = new ArrayList<Map<String, Object>>();

		Map<String, Object> filterItem = new HashMap<String, Object>();
filterItem.put("filterName", "TAG");
		filterItem.put("filterValue",
				getResources().getString(R.string.choose_note_tag));
		filterItems.add(filterItem);

……

(2)创建simpleAdapter实例,为其制定数据和每个item的样式,这一步最为重要,代码如下:

SimpleAdapter simpleAdapter = new SimpleAdapter(this, filterItems,
				R.layout.filter_item, new String[] { "filterName",
						"filterValue" }, new int[] { R.id.filterName,
						R.id.filterValue });

现在讲一下构造函数里面每个参数的含义吧:第一个是context,与一般的view一样,第二个是List,就是listview的数据项,第三个是item对应的布局文件,第四个是item中所有key的数组,第五个是item对应布局文件所有控件id的数组,必须与第四个参数一一对应。R.layout.filter_item布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/filterName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#FF0" />

    <TextView
        android:id="@+id/filterValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

(3)最后,肯定是为Listview绑定adapter并显示,代码如下:

filterListView.setAdapter(simpleAdapter);

至此,listview的显示就完成了。

下面讲一下listview的事件响应,有itemlongclick和itemclick,大同小异,这里主要讲itemclick。

很简单添加监听器就ok了,但要记住onitemclick每个参数的意义,代码如下:

filterListView.setOnItemClickListener(new OnItemClickListener() {

			/**
			 * arg0 noteListView的指针,可以通过它获取listview所有信息 arg1
			 * 点击的item的view的指针,可以获取item的id arg2 item的位置 arg3
			 * item在listview中的第几行,通常与arg2相同
			 */
			public void onItemClick(AdapterView<?> arg0, final View arg1,
					int arg2, long arg3) {
}

最后,我们要注意,如果在onitemclick中修改listview某个item,一定要记住要修改adapter指定的list,不然如果屏幕朝向改变时,listview会重新绑定一次adapter,会造成显示原来的内容。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一直在跳坑然后爬坑

RxJava2操作符之“Buffer”

这里贴一下观察者,为了能更清晰的看到发射出来的内容,我们将每一个item都打印出来

691
来自专栏求索之路

MVVM架构之自动增删改的极简RecycleView的实现

介绍图 先上个源代码的链接:https://github.com/whenSunSet/MVVMRecycleView RecycleView是Google替...

3896
来自专栏Flutter入门到实战

一次使用Kotlin实现酷炫多选操作的尝试

“手机上的多选很难操作”,我们的设计师Vitaly Rubtsov如是说。大多数应用中的多选方案 -Telegram, Apple Music, Spotif...

902
来自专栏xingoo, 一个梦想做发明家的程序员

【设计模式】—— 策略模式Strategy

  模式意图   定义一系列的算法,把他们封装起来,使得算法独立于适用对象。   比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有。因此把...

19710
来自专栏Android Note

Android RecyclerView添加搜索过滤器

1723
来自专栏开发之途

Android DataBinding 从入门到进阶

2213
来自专栏一直在跳坑然后爬坑

Recyclerview中使用databinding完成多布局

其实目前使用Recyclerview的关键部分在于adapter如何去编写,网上也有很多大神封装了各种万能adapter来供大家使用,但是对于我们这些新手,如果...

3412
来自专栏Android干货

关于Activity销毁,而绘制UI的子线程未销毁出现的问题

3716
来自专栏10km的专栏

jface databinding:label provider 实现多列表格(Table)数据绑定的两个途径

显示需求 如下图,希望将一组拥有两个字段的表与两列的table绑定在一起,实现自动显示。 ? 在jface viewer中label provide...

20810
来自专栏青蛙要fly的专栏

项目需求讨论— ButterKnife初级小结

在没有使用DataBinding之前,我的项目都是使用ButterKnife,当然对于ButterKnife大家估计都熟悉的不要太熟悉了。本文我也就当自己的一个...

773

扫码关注云+社区

领取腾讯云代金券