android学习--视图列表(ListView和ListActivity)

说明:

视图列表(ListView和ListActivity)与AutoComplete、Spinner类似,它们都需要一个供显示的列表项,可以需要借助于内容Adapter提供显示列表项

创建ListView有两种方式:

(1)直接使用ListView进行创建

(2)Activity继承ListActivity

ListView的常用XML属性

下面分别用两种方式创建ListView

方式一:直接使用ListView进行创建

(1)   main_activity.xml

下面布局两个listView,一个基于数组,一个基于Adapter

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/language"
       />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="30dp"/>
    <ListView
        android:id="@+id/listView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:headerDividersEnabled="true"
        android:footerDividersEnabled="true"
        android:divider="@drawable/img02"/>

</LinearLayout>

(2) strings.xml     存放listView1内容数组

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">ListView</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string-array name="language">
        <item>汉语</item>
        <item>韩语</item>
        <item>英语</item>
        <item>日语</item>
        <item>葡语</item>
        <item>俄语</item>
    </string-array>
</resources>

(3) MainActivity.java

步骤:

1、获取布局ListView

2、封装显示内容list或数组

3、构建适配器Adapter

4、给ListView添加适配器

package com.example.listview;

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.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

	private ListView listView2 = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//获取ListView
		listView2 = (ListView) findViewById(R.id.listView2);
		//定义数组
		String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
		//声明适配器
                //this  上下文
                //android.R.layout.simple_list_item_checked 列表样式
                //arr  显示内容 (数组或list集合)
                ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_checked, arr);
		//listView添加适配器
		listView2.setAdapter(arrayAdapter);
		listView2.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Log.i("listView", parent.getItemAtPosition(position).toString());

			}
		});

	}
}

运行效果如下:

如果想要自定义列表,列表项显示多个组件。我们可以用SimpleAdapter来自定义我们的列表。

(1)   main_activity.xml

布局了ImageView,TextView 组件,用于显示列表内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
     <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ImageView
	        android:id="@+id/img"
	        android:layout_width="50dp"
	        android:layout_height="65dp"/>
	    <TextView
	        android:id="@+id/name"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_marginLeft="100dp"
	        android:layout_marginTop="30dp"
	       />
	     <TextView
	        android:id="@+id/phone"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:layout_marginTop="30dp"
	        android:layout_marginLeft="150dp"
	     />
     </LinearLayout>
</LinearLayout>

(2)MainActivity.java    步骤与上面的一样

package com.example.listviews;

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.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	private ListView listView = null; //定义ListView组件

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//获取listView组件
		listView = (ListView) findViewById(R.id.listView);
		//初始化基础数据
		String name[] = new String[]{"张三","李四","王五","张飞"};
		String phone[] = new String[]{"14313426573","15908263541","18012345678","13423456789"};
		int img [] = new int[]{R.drawable.name01,R.drawable.name02,R.drawable.name03,R.drawable.name04};
		//封装list集合数据
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		for(int i=0;i<name.length;i++){
			Map<String,Object> listItem = new HashMap<String, Object>();
			listItem.put("img", img[i]);
			listItem.put("name", name[i]);
			listItem.put("phone", phone[i]);
			list.add(listItem);
		}
		//配置SimpleAdapter适配器
		//this  上下文
		//R.layout.activity_main   布局文件
		//new String[]{"img","name","phone"}    列表内容key
		//new int[]{R.id.img,R.id.name,R.id.phone}  用于显示内容的布局组件
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_main,
				new String[]{"img","name","phone"}, new int[]{R.id.img,R.id.name,R.id.phone});
		//添加适配器
		listView.setAdapter(simpleAdapter);
	}

}

运行效果如下:

除了SimpleAdapter之外,我们还可以重写BaseAdapter的getView方法作为列表的列表项 。 有兴趣的同学可以动手写写BaseAdapter

方式二:Activity继承ListActivity

注意:

ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。如果你不想使用默认的布局,可以在onCreate()方法中通过setContentView()方法设定你自己的布局。如果指定你自己定制的布局,你的布局中必须包含一个id"@id/android:list"的ListView。 若你还指定了一个id"@id/android:empty"的view,当ListView中没有数据要显示时,这个view就会被显示,同时ListView会被隐藏

(1)main_activity.xml

布局了一个ListView和TextView,TextView的id为@id/android:empty,当ListView中没有数据要显示时,这个TextView就会被显示

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
        android:id="@+id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <TextView android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000"
        android:text="No data"/>

</LinearLayout>

(2) MainActivity.java

package com.example.listactivity;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		String arr[] = new String[]{"中国","韩国","日本","美国","葡萄牙","俄罗斯"};
		//设置适配器
		ArrayAdapter<String >  arrayAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_checked, arr);
		//给ListActivity添加适配器
		setListAdapter(arrayAdapter);
	}

}

如果ListView没有内容,则显示TextView。如下

方式一和方式二的效果完全一样,不同的是,一个给ListView组件添加适配器,一个给ListActivity类添加适配器而已。

android学习--视图列表(ListView和ListActivity)

时间: 2024-10-11 10:19:51

android学习--视图列表(ListView和ListActivity)的相关文章

android学习笔记之ListView 和Adapter适配器

1.在学习Listview时候用到了Adapter适配器,定义MyAdapter时候需要继承ListAdapter接口,接口里很多方法没有实现,为了方便google工程师实现了个BaseAdapter类,我们在使用的时候可以继承这个抽象类,因此我们只需要完成几个抽象方法就可以了. public class Db_adapter extends BaseAdapter { private Context context; private List<Person> personlist; publ

Android学习——控件ListView的使用

一.ListView的简单用法 首先新建一个ListViewTest项目,并让Android Studio自动创建好活动.然后修改activity_main.xml中的代码,如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android

Android学习笔记:ListView简单实用--显示文字列表

在activity中的编写如下代码: final List<String> items = new ArrayList<String>(); //设置要显示的数据,这里因为是例子,所以固定写死 items.add("item1"); items.add("item2"); items.add("item3"); ListView listView = (ListView) findViewById(R.id.listVie

Android学习笔记:ListView及BaseAdapter使用

ListView是Android中常用的重要组件之一,基本上所有软件基本都会使用ListView,所以要对ListView非常熟悉. 先看看程序效果图: ListView的样式很多,有纯文字型,带图片显示,带按钮的等等.本次演示一个带图片的ListView. ①布局文件: 在ListView程序中,布局文件相比其他普通控件会多出至少一个,其原因是还需要一个关于ListView里面内容条目的布局文件. 内容条目的布局文件 listview_item.xml : <?xml version="

Android学习之解决ListView中item点击事件和item中Button点击事件冲突问题

在ListView中添加Button后,如果只是单纯的加入而不加限制的话,ListView的onClick点击事件没有响应,因为Button获取了item的焦点,想要两者都可点击,需要加上如下限制: 在ListView的适配器中的布局文件中添加: (1)在布局文件的根元素上中添加属性android:descendantFocusability="blocksDescendants" (2)在Button中添加属性android:focusable="false"和a

android学习八(ListView的高级使用)

ListView在android开放中用的比较多,所以接下来就进行ListView的使用的讲解. 首先创建一个android项目,项目名为ListViewTest. ListView的简单使用 修改布局文件,修改后代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

Android学习笔记之ListView与Item的焦点冲突处理

由于ListView的Item需要焦点,Item里面的子控件(如ImageButton,Button,CheckBox等等)也需要焦点的时候,就会出现焦点冲突问题,导致Item无法获得焦点,无法相应Item的事件无法触发.这是就需要为其分配焦点,通常我们是屏蔽Item里面的子控件(暂时学的都是这样的,以后还不知道),有三种解决方案: (1)XML中对Item的子控件设置属性:                          android:focusable="false" (2)在

Android学习笔记之ListView的简单使用

(1) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddi

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次