对于android来说,数据的展示与存储是非常重要的,那么,展示相应的数据列表更是很重要,下面我对android中ListView用法简洁的记录一下,方便大家查阅:
ListView项(Item)的三种布局使用例子
- 自定义的布局,使用了相对布局(RelativeLayout,见list_item.xml),左侧一个图片,右侧上方是字体比较大的title,下方是字体稍小的description;
-
Android自带的布局(simple_list_item_2),主要是一个垂直的LinearLayout,里面包含两个ID分别为text1、text2的TextView,这两个TextView的字体大小不一样,一个带textAppearanceLarge属性,另外一个带textAppearanceSmall属性;(如果只要显示一个内容就用simple_list_item_1)
- Android自带的布局(见源码里的two_line_list_item.xml),主要是一个垂直的LinearLayout,里面包含两个ID分别为text1、text2的TextView,这两个TextView的字体大小一样,但每个TextView还带一个字体加粗的属性。
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="wrap_content"
android:orientation="vertical"
>
<ListView android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:drawSelectorOnTop="false"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
>
<Button android:id="@+id/btnPrevious"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dip"
android:text="Previous">
</Button>
<Button android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next">
</Button>
</LinearLayout>
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5px"
android:layout_marginRight="5px"
android:src="@drawable/tea_80x59"
/>
<TextView android:id="@+id/titleTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageView"
android:textSize="22px"
/>
<TextView android:id="@+id/descTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageView"
android:layout_below="@id/titleTextView"
android:textSize="12px"
/>
</RelativeLayout>
MySimpleAdapterActivity.java
package com.tutor.simpleadapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MySimpleAdapterActivity extends ListActivity {
private Button btnPrevious = null;
private Button btnNext = null;
private String TAG = "SimpleAdapter";
private int index = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnPrevious = (Button)findViewById(R.id.btnPrevious);
btnNext = (Button)findViewById(R.id.btnNext);
btnPrevious.setOnClickListener(new ButtonClickListener(this));
btnNext.setOnClickListener(new ButtonClickListener(this));
Intent intent = getIntent();
index = intent.getIntExtra("Index", 0);
Log.d(TAG, "onCreate "+index);
switch((index % 3)) {
case 0://自定义的List Item布局
setListAdapter(new SimpleAdapter(this,
getData("custom-item"),
R.layout.list_item,
new String[]{"title", "description"},
new int[]{R.id.titleTextView, R.id.descTextView}));
Log.i(TAG, "SimpleAdapter with R.layout.list_1");
break;
case 1://Android提供的simple_list_item_2布局
setListAdapter(new SimpleAdapter(this,
getData("simple-list-item-2"),
android.R.layout.simple_list_item_2,
new String[]{"title", "description"},
new int[]{android.R.id.text1, android.R.id.text2}));
Log.i(TAG, "SimpleAdapter with android.R.layout.simple_list_item_2");
break;
case 2://Android提供的two_line_list_item布局
setListAdapter(new SimpleAdapter(this,
getData("two-line-list-item"),
android.R.layout.two_line_list_item,
new String[]{"title", "description"},
new int[]{android.R.id.text1, android.R.id.text2}));
Log.i(TAG, "SimpleAdapter with android.R.layout.two_line_list_item");
break;
default:
Log.i(TAG, "no SimpleAdapter");
}
}
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart "+index);
}
protected void onStart() {
super.onStart();
Log.d(TAG, "");
}
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume "+index);
}
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause "+index);
}
protected void onStop () {
super.onStop();
Log.d(TAG, "onStop "+index);
}
protected void onDestroy() {
Log.d(TAG, "onDestroy "+index);
if(btnPrevious != null) {
btnPrevious.setOnClickListener(null);
btnPrevious = null;
}
if(btnNext != null) {
btnNext.setOnClickListener(null);
btnNext = null;
}
super.onDestroy();
}
/**
* 构造SimpleAdapter的第二个参数,类型为List<Map<?,?>>
* @param title
* @return
*/
private List<Map<String, String>> getData(String title) {
List<Map<String, String>> listData = new ArrayList<Map<String, String>>();
for(int i = 1; i<=10; i++) {
Map<String, String> map = new HashMap<String, String>();
map.put("title", title+" "+i);
map.put("description", "This is the description of "+title+" "+i);
listData.add(map);
}
return listData;
}
/**
* 当List的项被选中时触发
*/
protected void onListItemClick(ListView listView, View v, int position, long id) {
Map map = (Map)listView.getItemAtPosition(position);
Toast toast = Toast.makeText(this, map.get("title")+" is selected.", Toast.LENGTH_LONG);
toast.show();
}
class ButtonClickListener implements View.OnClickListener {
private Activity context = null;
public ButtonClickListener(Activity context) {
this.context = context;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(context != null) {
Intent intent = context.getIntent();
int index = intent.getIntExtra("Index", 0);
if(v.getId() == R.id.btnNext) {
index += 1;
}else if(v.getId() == R.id.btnPrevious) {
index -= 1;
if(index < 0) {
index = Math.abs(index);
}
}
//发起新的Activity
Intent newIntent = new Intent(context, MySimpleAdapterActivity.class);
newIntent.putExtra("Index", index);
context.startActivity(newIntent);
//关闭原来的Activity
context.finish();
}
}
}
}
- 下面两个是Android自带的布局,直接引用即可,不用添加到工程中:
base/core/res/res/layout/simple_list_item_2.xml
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="2dip"
android:paddingBottom="2dip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:mode="twoLine"
>
<TextView android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@android:id/text1"
android:layout_alignLeft="@android:id/text1"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</TwoLineListItem>
base/core/res/res/layout/two_line_list_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@android:id/text1"
android:textSize="16sp"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView android:id="@android:id/text2"
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
三种不同方式展现结果如下:
SimpleAdapter的使用:
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
- context:也就是上下文,而Activity都是继承于Context的,所以这个参数一般使用Activity的实例;
- data:类型要为一个List的子类,且List中的每个元素都必须为Map的子类,每个Map中以有一对或多对的Key-Value对,这些值与下面的参数from有对应;
- resource:这是每个List项(Item)对应的XML布局资源文件名,在里面控制List项显示的元素以及相对位置;
- from:是一个字符串数组,可以理解为列名,对应于data数据中Map元素的Key值,只有包含在这个字符串数组的元素对应到Map中的Value值才能显示到TextView中(这些TextView在最后一个参数to配置),所以这些Value值需要为字符串或者有toString()的方法;
- to:TextView组件ID的数组,上面的from参数配置了Key值,而根据这个Key值从data参数里的map取出的value值需要设置到TextView中,而这些TextView的id需要在这个数组中配置。而且这些TextView需要在参数resource对应的XML资源文件中配置。
ps:
例子中使用了ListActivity,它有默认的XML资源文件;但由于本例需要添加两个按钮(原来的布局是没有按钮),所以重新在main.xml中配置了一个ListView,且ListActivity要求放到它里面的ListView的ID必须是 android:list 。本例的两个按钮主要是切换不同的ListActivity来显示ListView项的三种不同布局,一种是自定义的,另外两种是Android自带的常用ListView项布局。
- 大小: 61.1 KB
- 大小: 33.8 KB
- 大小: 42 KB
分享到:
相关推荐
android ListView简单用法
Android ListView使用技巧
本文档时对android中LIstView的用法,初学者可以看看了解下
android listview的使用方法,最简单的listview使用。
Android listview与adapter操作和用法
Android ListView分页功能源码
android listview的使用方法,创建listview列表,android开发控件的使用方法
android自定义listview使用方法 提供一般listview 带图片的listview 带按钮的listview listview学习的好Demo
listview使用方法代码源码。注释详尽。适合新手学习listview控件的使用。经验之谈。
Android中使用ArrayAdapter的demo,比较简单,里面用两种方法实现,在MainActivity里面,其中一种被我注释起来了,大家把注释去掉就好了。没有使用自定义适配器,对应的我的博客地址是:...
这是我平时用的多的一个小项目,刚开始的时候,老是实现不了在listView中RadionButton的单选功能,这是后来经过多次使用后。终于找到的解决listVIew中单选问题的解决办法,弄出来和大家一起学习
Android系列课程第三季:ListView原理、使用和优化——快速提高 从最重要的UI组件ListView入手,充分了解ListView的原理、使用方法和优化技巧,结合前两讲的内容,快速提高对Android开发技术掌握的能力。
学习android listview 使用,通过简单的demo让大家更快的了解listview使用方法。
android 横向滚动listview,和自带的listview用法一致
Android ListView用法演示实例,layout的xml文件名需要全部小写,下面来看这几个具体的例子: ActivityList1:介绍ListView和ArrayAdapter组件。 ActivityList2:介绍cusor和CursorAdapter(有错误,没有调试...
主要介绍了Android控件之ListView用法,以两则实例形式较为详细的分析了ListView控件显示信息列表时的具体使用技巧,需要的朋友可以参考下
这是一个关于android listview应用的一个源码程序,详细的解释了listview的应用和使用方法。
本文实例为大家分享了Android ListView实现图文列表显示的具体代码,供大家参考,具体内容如下 目标效果: ListView如果内容过多,可以滑动屏幕来显示,并且点击某一行可使用吐司方法弹出对应的水果名字。 1....
Android ListView控件基本用法 主要是相关代码!