改变分隔条、基于数组的ListView

main.xml

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:entries="@array/books"
    android:divider="@drawable/red"
    android:headerDividersEnabled="false"
    />
<!-- 使用ArrayAdapter提供列表项的ListView -->
<ListView  
    android:id="@+id/list2"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:divider="@drawable/green"
    />
</LinearLayout>

定义了两个ListView,第一个ListView通过android:entries指定列表项数组

第二个LisView通过ArrayAdapter使用数组来提供列表项。

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string-array name="books">
        <item>疯狂Java讲义</item>
        <item>疯狂Ajax讲义</item>
        <item>疯狂XML讲义</item>
        <item>疯狂Android讲义</item>
    </string-array>
</resources>

 

package org.crazyit.listview;

import org.crazyit.listview.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class ArrayAdapterList extends Activity
{ 
    @Override   
    protected void onCreate(Bundle savedInstanceState)
    {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        ListView list2 = (ListView)findViewById(R.id.list2);
        //定义一个数组
        String[] arr ={"孙悟空" , "猪八戒" , "牛魔王"};
        //将数组包装ArrayAdapter
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
            this , android.R.layout.simple_list_item_1 , arr);
        //为ListView设置Adapter
        list2.setAdapter(arrayAdapter);    
    }  
}
simple_list_item_1:每一个列表项都是一个普通的TextView
simple_list_item_2:每一个列表项都是一个普通的TextView(字体略大)
simple_list_item_checked:每一个列表项都是一个已勾选的列表项
simple_list_item_multiple_choice:每个列表项都是带多选框的文本
simple_list_item_single_choice:每个列表项都是带多单选按钮的文本



基于ListActivity实现列表
如果程序的窗口仅仅需要显示一个列表,则可以直接让Activity继承ListActivity来实现,
ListActivity旳子类无需调用setContentView()来显示某个界面,
而是可以传入一个内容Adapter,ListActivity旳子类就呈现出一个列表。
<?xml version="1.0" encoding="utf-8"?>
<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"   
    android:background="#0000ff"   
    android:layout_weight="1"   
    android:drawSelectorOnTop="false"/>
</LinearLayout>
 
package org.crazyit.listactivity;

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

public class ListActivityTest extends ListActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
//        //设置使用自己的界面布局
//        setContentView(R.layout.main);
        String[] arr = { "孙悟空", "猪八戒", "唐僧" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, arr);
        // 设置该窗口显示列表
        setListAdapter(adapter);
    }
}

 

使用SimpleAdapter创建ListView
SimpleAdapter自定义ListView的列表项

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<!-- 定义一个List -->
<ListView android:id="@+id/mylist"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<!-- 定义一个ImageView,用于作为列表项的一部分。 -->
<ImageView android:id="@+id/header"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:paddingLeft="10dp"
    />
<!-- 定义一个TextView,用于作为列表项的一部分。 -->
<TextView android:id="@+id/name"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:textSize="16dp"
    android:gravity="center_vertical"
    android:paddingLeft="10dp"
    />
</LinearLayout>

package org.crazyit.simpleadapter;

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

public class SimpleAdapterTest extends Activity
{
    private String[] names = new String[]
        { "虎头", "弄玉", "李清照", "李白"};
    private int[] imageIds = new int[]
        { R.drawable.tiger , R.drawable.nongyu
            , R.drawable.qingzhao , R.drawable.libai};
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //创建一个List集合,List集合的元素是Map
        List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < names.length; i++)
        {
            Map<String, Object> listItem = new HashMap<String, Object>();
            listItem.put("header", imageIds[i]);
            listItem.put("personName", names[i]);
            listItems.add(listItem);
        }
        //创建一个SimpleAdapter
        SimpleAdapter simpleAdapter = new SimpleAdapter(this
            , listItems 
            , R.layout.main
            , new String[]{ "personName", "header" }
            , new int[]{R.id.name , R.id.header});
        ListView list = (ListView)findViewById(R.id.mylist);
        //为ListView设置Adapter
        list.setAdapter(simpleAdapter);
    }
}
SimpleAdapter simpleAdapter = new SimpleAdapter(
this
, listItems  ——该参数应该是一个List<?extends Map<String, ?>>类型的集合对象,该集合中每个Map<String, ?>对象生成一个列表项;
, R.layout.main ——该参数指定一个界面布局的ID
, new String[]{ "personName", "header" } ——该参数应该是一个String[]类型的参数,该参数决定提取Map<String,?>对象中那些key对应的value来生成列表项
, new int[]{R.id.name , R.id.header});  ——该参数应该是一个int[]类型的参数,该参数决定使用哪些View组件来组合一个列表项
 


posted @ 2016-04-10 13:16  沉默的羊癫疯  阅读(144)  评论(0编辑  收藏  举报