Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android界面編程——Android高級UI組件(三)

Android界面編程——Android高級UI組件(三)

編輯:關於Android編程

2.4.1適配器組件

適配器的作用

適配器充當適配器控件和該視圖數據之間的橋梁。適配器提供訪問的數據項,並負責產生數據組中的每個項的視圖。

\

常用的適配器

BaseAdapter:抽象類,具有較高的靈活性。

ArrayAdapter:最為簡單,智能展示一行文字。

SimpleAdapter:有較好的擴充性,可以自定義出各種效果。

SimpleCursorAdapter:主要用於操作數據庫。

 

常用的適配器控制

適配器控件擴展自ViewAdapter,是通過適配器加載數據並產生每一項的UI,常見的適配器控件如下所示:

ListView 列表顯示控件

GridView 網格控件

Spinner 下拉列表控件

ViewPager 水平分頁控件

適配器控件使用setAdapter(Adapter adapter)方法裝載適配器

 

 

2.4.2 ListView列表顯示控件

是顯示可滾動的項目的列表圖組,如圖所示的新聞列表

\

 

列表項是通過適配器產生的View,可以使用ArrayAdapter、SimpleAdapter、BaseAdapter設計ListView的列表項

 

下面通過實例講解ListView控件和適配器的使用

實例2.4-1:使用ArrayAdapter實現如圖

\ \ \ \

ArrayAdapter是比較簡單適配器,只能用於顯示一行文本數據。構造函數如下:

ArrayAdapter(Context context, int resource, T[] objects)

ArrayAdapter(Context context, int resource, List objects)

參數說明:

resource:布局文件,使用系統定義的布局資源

objects:列表項數據

 

實例2.4-2:使用SimpleAdapter實現如圖

\

\

\

\

 

SimpleAdapter是相比ArrayAdapter比較靈活,可以列表項可以顯示多種數據。構造函數如下:

SimpleAdapter(Context context, List> data, int resource, String[] from, int[] to)

Context:SimpleAdapter關聯的View的運行環境

data :一個Map組成的List。在列表中的每個條目對應列表中的一行,每一個map中應該包含所有在from參數中指定的鍵

resource:一個定義列表項的布局文件的資源ID。布局文件將至少應包含那些在to中定義了的ID

from:一個將被添加到Map映射上的鍵名

to:將綁定數據的視圖的ID,跟from參數對應

\

\

\

 

實例2.4-3:使用BaseAdapter實現如圖

\

\

\

\

\

\

 

public class NewsListAdapter extends BaseAdapter {
    private Context context;
    private List newsList;
    public NewsListAdapter(Context context,List newsLsit){
        this.context=context;
        this.newsList=newsLsit;
    }
    @Override
    public int getCount() {
        Log.d("jereh","NewsListAdapter-->getCount");
        return newsList!=null?newsList.size():0;
    }
    @Override
    public Object getItem(int position) {
        Log.d("jereh","NewsListAdapter-->getItem");
        return newsList.get(position);
    }
    @Override
    public long getItemId(int position) {
        Log.d("jereh","NewsListAdapter-->getItemId");
        return position;
    }
    private class ViewHolder{
        public TextView tvTitle;
        public TextView tvAuthor;
        public TextView tvTimer;
        public ImageView ivImg;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
         News news=newsList.get(position);
        ViewHolder holder=null;
        if(convertView==null){
            Log.d("jereh","NewsListAdapter-->為列表項構建一個View");
            convertView=LayoutInflater.from(context).
                    inflate(R.layout.ch04_news_item_layout,null);
            holder=new ViewHolder();
            holder.tvTitle=(TextView)convertView.findViewById(R.id.tvTitle);
            holder.tvAuthor=(TextView)convertView.findViewById(R.id.tvAuthor);
            holder.tvTimer=(TextView)convertView.findViewById(R.id.tvTime);
            holder.ivImg=(ImageView)convertView.findViewById(R.id.ivImg);
            convertView.setTag(holder);
        }else{
            holder= (ViewHolder)convertView.getTag();
        }
        holder.tvTitle.setText(news.getTitle());
        holder.tvAuthor.setText(news.getAuthor());
        holder.ivImg.setImageResource(news.getImageRes());
        long timer=news.getTime();
        String timeFlag="";
        if(timer<1000*60*5){
            timeFlag="剛剛";
        }else if(timer<1000*60*60){
            timeFlag="一小時之前";
        }else {
            Date date=new Date(new Date().getTime()-timer);
            SimpleDateFormat sdf=new SimpleDateFormat("MM月dd日");
            timeFlag=sdf.format(date);
        }
        holder.tvTimer.setText(timeFlag);
        return convertView;
    }
}

 

自定義適配類的實現

1、編寫適配類,擴展BaseAdapter

public class NewsListAdapter extends BaseAdapter

2、編寫構造函數, 傳入適配器所需的數據和Context

public NewsListAdapter(Context context,List newsLsit)

3、重寫BaseAdapter的方法

?int getCount(): 返回總數據量

?Object getItem(int position):根據position得到一項數據

?long getItemId() :得到某一行的id

?View getView(int postion,View convertView,ViewGroup parent)

產生列表一項的View並填充數據,返回產生的視圖

ViewHolder機制

為了提高ListVew的產生View的效率,復用已存在的View,減少UI的創建次數,而采用的優化方案

1、編寫ViewHolder類,定義列表項所需的UI元素

private class ViewHolder{

public TextView tvTitle;

public TextView tvAuthor;

public TextView tvTimer;

public ImageView ivImg;

}

2、若convertView為空時創建UI,並使用ViewHolder實體引用列表項中產生的UI,若converView不為空,則不需要創建,使用保存在ViewHolder實體中UI即可。代碼片段如下:

if(convertView==null){

convertView=LayoutInflater.from(context).

inflate(R.layout.ch04_news_item_layout,null);

holder=new ViewHolder();

holder.tvTitle=(TextView)convertView.findViewById(R.id.tvTitle);

holder.tvAuthor=(TextView)convertView.findViewById(R.id.tvAuthor);

holder.tvTimer=(TextView)convertView.findViewById(R.id.tvTime);

holder.ivImg=(ImageView)convertView.findViewById(R.id.ivImg);

convertView.setTag(holder);

}else{

holder= (ViewHolder)convertView.getTag();

}

\

\

\

\

\

 

2.4.3 GridView控件

 

以行和列的方式顯示可滾動網格控件,網格中的每一項由ListAdapter與視圖之間的關聯產生。典型應用如圖所示的“九宮格”效果:

\

 

表2.4.3-1列出了GridView常用的屬性和方法。

表2.4.3-1GridViewL屬性和方法

XML屬性

備注

android:numColumns

num、auto_fit

指定GridView的列數個數,可設置為自動

android:columnWidth

dp

每列的寬度,也就是Item的寬度

android:stretchMode

columnWidth

設置縮放模式,與列寬大小同步

android:verticalSpacing

dp

兩行之間的邊距

android:horizontalSpacing

dp

兩列之間的邊距

android:cacheColorHint

#00000000

去除拖動時默認的黑色背景

android:scrollbars

none、vertical、horizontal

設置GridView的滾動條的顯示方式

 

下面通過實例講解一下GridView的使用

實例2.4.3-1,使用GridView實現如如圖的圖片牆效果

\

\

\

\

\

\

\

\

 

2.4.4 Spinner控件

 

下拉選項控件,為用戶提供了一個快速的方法來選擇一組一個值,如圖2.4.4-1所示點選Spinner將顯示與所有其他可用的值,用戶可以選擇一個新的下拉選項。

 

\

圖2.4.4-1

Spinner控件也屬於適配器控件,與之前的ListView、GridView控件使用十分相似,一個關鍵點就是編寫Adapter,下面通過實例講解一下Spinner的使用


\ \ \

2.4.5 ViewPager控件

橫向滑動的分頁控件應用十分廣泛的組件之一,常見應用有不同頻道的左右滑動顯示,可橫向翻動的圖片等。ViewPager專屬適配器PagerAdapter,通過提供一個的實現 PagerAdapter的適配器生成該視圖顯示的每個顯示頁面

ViewPager最常配合使用片段,這是一種方便的方式來提供和管理每個片段的生命周期。並提供了實施ViewPager片段的標准適FragmentPagerAdapter和 FragmentStatePagerAdapter

ViewPager實現步驟:

1、布局文件中加入ViewPager控件

2、編寫適配器——實現PagerAdapter

3、使用setAdapter()加載適配器

 

表2.4.5-1 PagerAdapter適配器的方法及其作用。

表2.4.5-1PagerAdapter方法和作用

方法

作用

int getCount()

返回翻轉頁面的個數

boolean isViewFromObject(View view, Object obj)

用於判斷對象是否是用於呈現在ViewPager的View組件

Object instantiateItem(View container, int position)

返回ViewPager的一頁

void destroyItem(ViewGroup container, int position, Object object)

從ViewGroup中移出View

下面通過實例逐步掌握ViewPager的使用。

實例2.4.5-1,使用ViewPager實現如圖所示的新聞圖片浏覽界面。

\ \ \ \ \ \ \ \        
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved