2.5 第4组UI组件: AdapterView及子类

AdapterView是一组重要的组件,AdapterView本身是一个抽象基类,它派生的子类在用法上十分相似,只是i显示界面有一定的区别,因此本节把他们归为一类,针对他们的共性集中讲解,并突出介绍他们之间的区别。

AdapterView具有如下特征。

>AdapterView继承了ViewGroup,它本质是是容器。

>AdapterView可以包含多个“列表项”,并将多个“列表项”以合适的形式显示出来。

>AdapterView 显示的多个“列表项”由Adapter提供。调用AdapterView的setAdapter(Adapter)仿佛设置Adapter即可。

AdapterView派生了三个子类;AbsListView,AbsSpinner和AdapterVViewAnimator,这三个子类依然是抽象的,实际使用时往往采用他们的子类。

2.5.1 列表视图(ListView)和ListActivity

ListView是手机系统使用非常广泛的一种组件,它以垂直列表的形式显示所有列表项。生成列表视图由如下两种方式。

>直接使用ListView进行创建。

>让Activity继承ListView(相当于该Activity显示的组件为ListView)。

一旦在程序中获得了ListView之后,接下来就需要为ListView设置它要显示的列表项了。哎这一点上。ListView显示出AdapterView的特征:通过setAdapter(Adapter)为之提供列表项即可。

ListView,GridView,Spinner,Gallery等AdapterView都只是容器,而Adapter负责提供每个“列表项”组件,AdapterView则负责采用合适的方式显示这些列表项。

实例;

ListView

<ListView
    android:entries="@array/books"
    android:divider="#f00"
    android:dividerHeight="2px"
    android:headerDividersEnabled="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></ListView>

上面布局文件,通过android:entries指定了列表项数组,该ListView还通过android;divider改变了列表项之间的分割条。

上面这个ListView制定了android:entries="@array@books",该属性用到了数组资源啊,因此还需要在应用中定义一个名为books的数组,定义数组的资源文件如下。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="books">
        <item>xjl</item>
        <item>qxl</item>
        <item>ywj</item>
        <item>xjl</item>
        <item>xjl</item>
        <item>xjl</item>
        <item>xjl</item>
    </string-array>
</resources>
	2.5.2 Adapter接口及实现类
	Adapter本身只是一个接口,它派生了ListAdapter和SpinnerAdapter两个子接口,其中ListAdapter为AbsListView
提供列表项,而SpinnerAdapter为AbsSpinner提供列表项。
	ListAdapter,BaseAdapter,ArrayAdapter,simpleAdapter,SimpleCursorAdapter是比较常用的Adapter
	几乎所有的Adapter都继承了BaseAdapter,而BaseAdapter同时实现了ListAdapter,SpinnerAdapter两个接口
因此BaseAdapter及其子类可以同时为AbsListView,AbsSpinner提供列表项。
	Adapter常用到的实现类如下。
	>ArrayAdapter:简单,易用的Adapter,通常用于将数组或者List集合的多个值包装成多个列表项。
	>SimpleAdapter:并不简单,功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。
	>SimpleCursorAdapter:与SimpleAdapter基本类似,只是用于包装Cursor提供的数据。
	>BaseAdapter: 通常用于被扩展。扩展BaseAdater可以对各列表项进行最大限度的定制。
	下面先通过ArrayAdapter来实现ListView。
	
<ListView
    android:id="@+id/list1"
    android:divider="#f00"
    android:dividerHeight="2px"
    android:headerDividersEnabled="false"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</ListView>
package com.example.a87188.arrayadaptertest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list1= (ListView) findViewById(R.id.list1);
        //定义一个数组
       String []arr1={"生物课","物理课","数学课"};
        //将数组包装成ArrayAdapter
        ArrayAdapter<String>adpter1=new ArrayAdapter<String>(this,R.layout.array_item,arr1);
        //为ListView设置Adapter
        list1.setAdapter(adpter1);
    }
}
ArrayAdapter系统自带item的似乎只能TextView。
	>Context:这个参数毋庸多言,它代表访问整个Android应用的接口。几乎创建所有组件都需要传入Context
对象。
	>textViewResourceId:一个资源id,该资源ID代表一个TEXTview,该TextView组件将作为ArrayAdapter的列表项组建
	>数组或List: 该数组或List负责为多个列表项提供数据。
	从上面介绍不难看出,创建ArrayAdapter时传入的第二个参数控制每个列表项的组件,第三个参数负责给每个组件
提供数据。该数组或数据包含多少个元素,就将生成多少个列表项,每个列表项都是TextView组件,TetxView组件显示的数组或
List的元素提供/。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值