`
骞子_Isaac
  • 浏览: 8311 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android ListView用法简介

阅读更多

对于android来说,数据的展示与存储是非常重要的,那么,展示相应的数据列表更是很重要,下面我对android中ListView用法简洁的记录一下,方便大家查阅:

ListView项(Item)的三种布局使用例子

  1. 自定义的布局,使用了相对布局(RelativeLayout,见list_item.xml),左侧一个图片,右侧上方是字体比较大的title,下方是字体稍小的description;
  2. Android自带的布局(simple_list_item_2),主要是一个垂直的LinearLayout,里面包含两个ID分别为text1、text2的TextView,这两个TextView的字体大小不一样,一个带textAppearanceLarge属性,另外一个带textAppearanceSmall属性;(如果只要显示一个内容就用simple_list_item_1)
  3. 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)
  1. context:也就是上下文,而Activity都是继承于Context的,所以这个参数一般使用Activity的实例;
  2. data:类型要为一个List的子类,且List中的每个元素都必须为Map的子类,每个Map中以有一对或多对的Key-Value对,这些值与下面的参数from有对应;
  3. resource:这是每个List项(Item)对应的XML布局资源文件名,在里面控制List项显示的元素以及相对位置;
  4. from:是一个字符串数组,可以理解为列名,对应于data数据中Map元素的Key值,只有包含在这个字符串数组的元素对应到Map中的Value值才能显示到TextView中(这些TextView在最后一个参数to配置),所以这些Value值需要为字符串或者有toString()的方法;
  5. 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的基本用法。 ### 1. 添加ListView到布局 首先,在XML布局文件中添加ListView组件。一个基本的ListView元素如下所示: ```xml &lt;ListView android:id="@+id/list_view" ...

    android中一个简单的LIstView用法例子

    这个简单的ListView用法例子将帮助初学者理解和掌握如何在实际项目中运用ListView。 首先,我们来了解一下ListView的基本结构。ListView是Android SDK中的一个视图类,继承自AbsListView。它的核心功能是展示一个可...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    在实际开发中,为了优化性能,通常会使用ViewHolder模式来减少视图查找的时间,同时对ListView进行适当的滚动优化,如使用懒加载、设置Item的复用策略等。 最后,记得处理触摸事件,确保点击父ListView的条目时不会...

    Android ListView边框圆角美化

    3. **适配器的使用**:在适配器类中,如`ArrayAdapter`或自定义的`BaseAdapter`,你需要使用`getView()`方法来返回ListView项的视图。确保在该方法中加载你刚才创建的布局文件,并正确地绑定数据。 4. **性能优化**...

    Android ListView使用技巧

    本篇文章将深入探讨几个关键的Android ListView使用技巧,帮助你提升应用的用户体验和性能。 1. **适配器Adapter的使用** ListView的核心在于适配器,它负责将数据集转化为ListView可显示的视图。常见的适配器有...

    Android listview自动换行

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在显示数据集合时十分有用。然而,当ListView的子项(item)宽度超过屏幕宽度时,如何实现自动换行就成了一个...

    Android ListView 下拉刷新、上拉加载

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`下拉刷新`和`上拉加载`功能的实现,极大地提升了用户体验,让用户能够实时获取到最新的数据。本篇文章将深入探讨如何在ListView中实现这两种...

    android ListView 网格布局

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的网格布局模式使得数据以多列的形式展示,增强了界面的可读性和用户体验。本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格...

    android listview 固定表头,固定前几列

    在ListView的`onCreate()`方法中加载这个布局,并将其添加到ListView的顶部: ```java LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View headerView = ...

    androidlistview里面使用radiobutton

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。而当需要在ListView中实现单选功能时,我们通常会使用RadioButton。本文将深入探讨如何在ListView中集成RadioButton,以及相关的实现...

    android listview带有editText

    解决这个问题的一个常见方法是使用ListView的`setOnItemSelectedListener`或`setOnFocusChangeListener`监听器,以及EditText的`clearFocus()`方法,确保在焦点转移时正确处理视图状态。同时,可能还需要重写...

    Android listview嵌套listview

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。然而,有时我们可能需要在一个ListView的项中再嵌套另一个ListView,这被称为ListView的嵌套。这样的设计可以用于展示复杂的数据结构,比如...

    Android ListView实例源码

    综上所述,"Android ListView 实例源码"应包含了ListView的基本用法、自定义Adapter的实现、事件监听、性能优化等多个方面。通过研究这个源码,开发者可以深入理解ListView的工作原理,并学习如何在实际项目中高效地...

    android listview 里面使用checkbox

    综上所述,要在Android的ListView中使用Checkbox,我们需要创建自定义Adapter,设计Checkbox的布局,管理复选状态,监听并处理用户操作,同时注意性能优化和状态恢复。在实际项目中,这样的实现方式能够提供灵活的...

    Android listview 下拉刷新

    在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。然而,随着移动应用交互体验的提升,用户期望更多的动态功能,如下拉刷新(Pull-to-Refresh)。下拉刷新功能允许用户通过在ListView顶部向下拉动...

    android listView 适配器demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...

    android listview 下拉刷新 动态加载数据 图文混排

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。本教程将重点讲解如何在ListView中实现下拉刷新和动态加载数据的功能,同时处理图文混排的问题。 首先,我们要引入SwipeRefreshLayout库,...

    Android ListView长按删除

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。在许多应用中,我们可能需要添加一些交互性功能,比如长按删除,以增强用户体验。本篇文章将详细...

    android listview的使用方法

    本篇文章将深入探讨如何在Android中使用ListView,包括基本配置、适配器(Adapter)的使用以及一些优化技巧。 首先,我们需要在布局文件中添加ListView元素。在XML布局中,你可以这样定义一个ListView: ```xml ...

    android listview

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。本篇文章将深入探讨“android listview”相关的知识点,包括横向ListView、微信风格的ListView以及XListView的优化。 首先,我们来看“横向...

Global site tag (gtag.js) - Google Analytics