• android-UI组件(四):AdapterView及其子类


    http://blog.csdn.net/litianpenghaha/article/details/23270881

    AdapterView组件是一组重要的组件,AdapterView本身是一个抽象基类,它派生的子类在用法上十分相似,知识显示界面有些不同,

    下面是AdapterView及其子类的继承关系类图:

    从AdapterView派生出的三个子类:AdsListView、AdsSpinner、AdapterViewAnimator,这3个子类依然是抽象的,实际运用时需要它们的子类。

    1、ListView(列表视图)和ListActivity:

    ListView应用十分广泛,它以垂直列表的形式显示所有的列表项,

    创建ListView的两种方法:

    (1)直接使用ListView创建;

    (2)让Activity继承ListActivity,就是该Activity显示的组件为ListView

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

    AbsListView的XML属性如下:

     
    ListView提供了如下的XML属性:
     
    如果想对ListView的外观、行为进行定制,就要把ListView作为AdapterView使用,通过Adapter控制每个列表的外观和行为。
     
    2、Adapter接口及其实现类:
    下面是其关系图:
    Adapter接口派生出了ListAdapter和SpinnerAdapter两个子接口,可以看出,几乎所有的Adapter都继承BaseAdapter。
    Adapter常用的实现类如下:
     
    通过ArrayAdapter实现的Adapter很简单,其功能也比较有限,而且它的每个列表都只能是TextView,如果要实现复杂的功能,则可以使用SimpleAdapter。
    下面给出SimpleAdapter的一个实例:
    activity_simple.xml如下:
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:orientation="vertical"  
    6.     android:paddingBottom="@dimen/activity_vertical_margin"  
    7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
    8.     android:paddingRight="@dimen/activity_horizontal_margin"  
    9.     android:paddingTop="@dimen/activity_vertical_margin"  
    10.     tools:context=".SimpleActivity" >  
    11.   
    12.     <ListView  
    13.         android:id="@+id/mylist"  
    14.         android:layout_width="match_parent"  
    15.         android:layout_height="wrap_content" >  
    16.     </ListView>  
    17.   
    18. </LinearLayout>  

    simple_item.xml如下:
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="wrap_content"  
    5.     android:orientation="horizontal" >  
    6.   
    7.     <ImageView  
    8.         android:id="@+id/header"  
    9.         android:layout_width="wrap_content"  
    10.         android:layout_height="wrap_content"  
    11.         android:paddingLeft="10dp" >  
    12.     </ImageView>  
    13.   
    14.     <LinearLayout  
    15.         android:layout_width="match_parent"  
    16.         android:layout_height="wrap_content"  
    17.         android:orientation="vertical" >  
    18.   
    19.         <TextView  
    20.             android:id="@+id/name"  
    21.             android:layout_width="wrap_content"  
    22.             android:layout_height="wrap_content"  
    23.             android:paddingLeft="10dp"  
    24.             android:textColor="#f0f"  
    25.             android:textSize="20sp" >  
    26.         </TextView>  
    27.   
    28.         <TextView  
    29.             android:id="@+id/desc"  
    30.             android:layout_width="wrap_content"  
    31.             android:layout_height="wrap_content"  
    32.             android:paddingLeft="10dp"  
    33.             android:textSize="14sp" >  
    34.         </TextView>  
    35.     </LinearLayout>  
    36.   
    37. </LinearLayout>  

    1. package com.simpleadapter;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.HashMap;  
    5. import java.util.List;  
    6. import java.util.Map;  
    7.   
    8. import android.os.Bundle;  
    9. import android.app.Activity;  
    10. import android.view.Menu;  
    11. import android.view.View;  
    12. import android.widget.AdapterView;  
    13. import android.widget.AdapterView.OnItemClickListener;  
    14. import android.widget.AdapterView.OnItemSelectedListener;  
    15. import android.widget.ListView;  
    16. import android.widget.SimpleAdapter;  
    17.   
    18. public class SimpleActivity extends Activity {  
    19.   
    20.     private String[] names = { "虎头", "弄玉", "李清照", "李白" };  
    21.     private String[] descs = { "可爱的孩子", "一个擅长音乐的女孩", "一个擅长写词的女性", "一个伟大的浪漫主义诗人" };  
    22.     private int[] imageIds = new int[] { R.drawable.tiger, R.drawable.nongyu,  
    23.             R.drawable.qingzhao, R.drawable.libai };  
    24.   
    25.     @Override  
    26.     protected void onCreate(Bundle savedInstanceState) {  
    27.         super.onCreate(savedInstanceState);  
    28.         setContentView(R.layout.activity_simple);  
    29.         List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();  
    30.         for (int i = 0; i < names.length; ++i) {  
    31.             Map<String, Object> listItem = new HashMap<String, Object>();  
    32.             listItem.put("header", imageIds[i]);  
    33.             listItem.put("name", names[i]);  
    34.             listItem.put("desc", descs[i]);  
    35.             listItems.add(listItem);  
    36.         }  
    37.         SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,  
    38.                 R.layout.simple_item,  
    39.                 new String[] { "name", "header", "desc" }, new int[] {  
    40.                         R.id.name, R.id.header, R.id.desc });  
    41.         ListView list = (ListView) findViewById(R.id.mylist);  
    42.         list.setAdapter(simpleAdapter);  
    43.   
    44.         // ListView的列表项的单击事件绑定事件监听器  
    45.         list.setOnItemClickListener(new OnItemClickListener() {  
    46.   
    47.             @Override  
    48.             public void onItemClick(AdapterView<?> parent, View view,  
    49.                     int position, long id) {  
    50.                 System.out.println(names[position] + "被单击了");  
    51.             }  
    52.   
    53.         });  
    54.   
    55.         // 为ListView的列表项的选中事件绑定事件监听器  
    56.         list.setOnItemSelectedListener(new OnItemSelectedListener() {  
    57.   
    58.             @Override  
    59.             public void onItemSelected(AdapterView<?> parent, View view,  
    60.                     int position, long id) {  
    61.                 System.out.println(names[position] + "被选中了");  
    62.             }  
    63.   
    64.             @Override  
    65.             public void onNothingSelected(AdapterView<?> arg0) {  
    66.   
    67.             }  
    68.         });  
    69.     }  
    70.   
    71.     @Override  
    72.     public boolean onCreateOptionsMenu(Menu menu) {  
    73.         // Inflate the menu; this adds items to the action bar if it is present.  
    74.         getMenuInflater().inflate(R.menu.simple, menu);  
    75.         return true;  
    76.     }  
    77.   
    78. }  
    运行界面如下:


    点击或者选中按钮时在LogCat上面会有显示。
     
    3、AutoCompleteTextView(自动完成文本框):
    AutoCompleteTextView从EditText派生而来,实际上也是一个文本编辑框,但是它比普通的编辑框多一个功能:当用户输入一定的字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView会按照用户的选择自动填写该文本框。
    AutoCompleteTextView除了支持EditText的属性方法之外,还支持如下的XML属性以及方法:
     
    AutoCompleteTextView派生一个子类:MultiAutoCompleteTextView,该子类的功能与AutoCompleteTextView基本相似,只是MultiAutoCompleteTextView比AutoCompleteTextView允许输入多个提示项,以分隔符分隔。
     
    4、GridView(网格视图):
    GridView用于在界面上按行列分布的方式来显示多个组件,GridView和ListView具有相同的父类:AbsListView,因此GridView和ListView很相似,但是ListView只显示一列,GridView可以显示多列
    GridView常用的XML属性:
    注意:使用GridView一般都会设置numColumns大于1,否则该默认值为1,则意味着该GridView只有一列,就相当于ListView了。
    上表中android:stretchMode属性支持如下属性值:
     
    5、ExpandableListView(可展开的列表组件):
     
    ExpandableListView是ListView的子类,它在普通ListView的基础上进行扩展,把应用中的列表项分为几组,每组又可以包含多个列表项,ExpandableListView与普通的ListView用法十分相似,只是
    ExpandableListView所显示的列表应该由ExpandableListAdapter提供,下面是其继承关系图:
    实现ExpandableListAdapter的3种常用方式:
    下面显示ExpandableListView支持的XML属性:
     
    6、Spinner:
    Spinner组件就是一个列表选择框,这里相当于弹出一个菜单供用户选择。Spinner继承AbsSpinner,AbsSpinner继承AdapterView,因此Spinner表现出ApdaterView的特征,下面显示了Spinner的XML属性:
    注意:上面的android:entries属性并不是Spinner定义的,而是在AbsSpinner中定义的,
     
    7、Gallery(画廊视图):
    Gallery继承AbsSpinner,且Gallery显示的也是一个列表框,但是Gallery显示的是一个水平的列表框,Spinner显示的是一个垂直的列表框。它们之间的区别还有:Spinner作用是供用户选择,而Gallery则允许用户通过拖动来查看上一个、下一个列表项。
    Gallery提供的XML属性:
    注意:android已经不再推荐使用Gallery组件,而是推荐使用其他的水平滚动组件HorizontalScrollView和ViewPager来代替Gallery。
     
    8、AdapterViewFipper:
    AdapterViewFipper继承AdapterViewAnimator,下面是其支持的XML属性:
    它额外指定的属性:
     
    9、StackView:
    StackView也是AdapterViewAnimator的子类,StackView以“堆叠”的方式来显示多个列表项,
    StackView提供的两种控制方式:
  • 相关阅读:
    订餐系统
    throw和throws
    CF999E Solution
    CF1142B Solution
    CF965C Solution
    CF963B Solution
    CF999F Solution
    CF975D Solution
    CF997B Solution
    hdu 2553 N皇后
  • 原文地址:https://www.cnblogs.com/feng9exe/p/5730479.html
Copyright © 2020-2023  润新知