Android学习笔记ListView

在手机实际应用中,我们常常需要列表来显示我们的信息,比如我们的联系人列表,短信信息列表等。在Android中通过ListView来实现。

ListView 的XML属性

属性名称

描述

android:choiceMode

规定此ListView所使用的选择模式。缺省状态下,list没有选择模式。属性值必须设置为下列常量之一:

none,值为0,表示无选择模式;

singlechoice,值为1,表示最多可以有一项被选中;

multichoice,值为2,表示可以多项被选中。

android:divider

规定List项目之间用某个图形或颜色来分隔。可以用"@[+][package:]type:name"或者"?[package:][type:]name"(主题属性)的形式来指向某个已有资源;也可以用"#rgb","#argb","#rrggbb"或者"#aarrggbb"的格式来表示某个颜色。

android:dividerHeight

分隔符的高度。若没有指明高度,则用此分隔符固有的高度。必须为带单位的浮点数,如"14.5sp"。可用的单位如px(pixel像素),dp(density-independent pixels 与密集度无关的像素), sp(scaled pixels based on preferred font size 基于字体大小的固定比例的像素), in (inches英寸), mm (millimeters毫米)。

可以用"@[package:]type:name"或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。

android:entries

引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单。

必须以"@[+][package:]type:name"或者 "?[package:][type:]name"的形式来指向某个资源。

android:footerDividersEnabled

设成flase时,此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。

属性值必须设置为true或false。

可以用"@[package:]type:name"或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。

android:headerDividersEnabled

设成flase时,此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。

属性值必须设置为true或false。

可以用"@[package:]type:name"或者"?[package:][type:]name"(主题属性)的格式来指向某个包含此类型值的资源。

例子一:利用Android自带的List格式

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"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">
     
     <ListView
         android:id="@id/android:list"
         android:layout_width="fill_parent"
         android:layout_height="0dip"
         android:background="#FFFFFF"
         android:divider="#000000"
         android:dividerHeight="2dp"
         android:layout_weight="1"
         android:drawSelectorOnTop="false"/>
     
     <TextView
         android:id="@id/android:empty"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:background="#FF0000"
         android:text="No Data"/>"
</LinearLayout>

源代码:

@Override
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  String[] contries= getResources().getStringArray(R.array.countries_arry);
  setContentView(R.layout.activity_listview);
  setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,contries));
  getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //这里我们直接在源代码中设置选择模式,也可以在xml文件中进行配置
  getListView().setBackgroundColor(Color.WHITE);
  getListView().setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> arg0, View view, int position,
     long id) {
    Toast.makeText(getApplicationContext(),((TextView) view).getText(), Toast.LENGTH_SHORT).show();
   }
  });
 }
ListView的选择模式有三种:
CHOICE_MODE_NONE:表示无选择模式;设置为无选择模式时,将不能选中Item项,但能响应ItemClick事件
CHOICE_MODE_SINGLE:表示最多可以有一项被选中
CHOICE_MODE_MULTIPLE:表示可以多项被选中
方法setListAdapter 设置ListView背后的数据。参数为ListAdapter,这里我们使用ArrayAdapter,该Adatper可以指定我们自己定义的Item对象。这里我使用系统已有的对象:android.R.layout.simple_list_item_single_choice 
一般的:
simple_list_item_single_choice     对应的选择模式为: CHOICE_MODE_SIGLE; (效果如图一)
simple_list_item_multiple_choice 对应的选择模式为: CHOICE_MODE_MULTIPLE (效果如图二)
simple_list_item_1                         对应的选择模式为: CHOICE_MODE_NONE (效果如图三)

自定义ListView 格式

建立描述list item格式的XML文件

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="2dp"
    android:paddingRight="2dp" >
</TextView>

源文件设置xml文件

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String[] contries = getResources().getStringArray(R.array.countries_arry);
  setListAdapter(new ArrayAdapter<String>(this,R.layout.activity_mylistview, contries));
  getListView().setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> arg0, View view,int position, long id) {
    Toast.makeText(getApplicationContext(),((TextView) view).getText(), Toast.LENGTH_SHORT).show();
   }
  });
 }

效果图

另外上面用到了数组string 的定义:在values/string.xml文件中定义如下:

    <string-array name="countries_arry">
        <item>Bharain</item>
        <item>Bangladesh</item>
        <item>Barbados</item>
        <item>Belarus</item>
        <item>Belgium</item>
        <item>Belize</item>
        <item>Benin</item>
    </string-array>
这样就可以在源代码中通过R.array.countries_arry引用

Toast:

Toast是一种提供给用户简洁信息的视图。Toast类帮助你创建和显示该信息。

该视图已浮于应用程序之上的形式呈现给用户。因为它并不获得焦点,即使用户正在输入什么也不会受到影响。它的目标是尽可能已不显眼的方式,使用户看到你提供的信息。有两个例子就是音量控制和设置信息保存成功。

使用该类最简单的方法就是调用一个静态方法,让他来构造你需要的一切并返回一个新的 Toast 对象。

常量

int LENGTH_LONG

持续显示视图或文本提示较长时间。该时间长度可定制。

参见

setDuration(int)

int LENGTH_SHORT

持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。

参见

setDuration(int)

原文地址:https://www.cnblogs.com/dennytao/p/5351902.html