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

来源:互联网 发布:java web 开发 编辑:程序博客网 时间:2024/05/01 16:02

 说明:

     视图列表(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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取ListViewlistView2 = (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() {@Overridepublic 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组件@Overrideprotected 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 {@Overrideprotected 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类添加适配器而已。

0 0
原创粉丝点击