編輯:Android開發實例
ListAcitivity 類型布局用來配置應用程序,主要為顯示菜單列表、列表明細項目,假如讓程序繼承 ListActivity ,可以實現以下的方法:
ListAcitivity 默認並不一定要像繼承自 Acitivity一樣,必須使用 seContentView 來設置版型 Layout 才能顯示頁面,ListAcitivity 可以在不必重寫 Protected void onCreate(Bundle savedInstanceState)的情況下,直接將列表加載至 ListAcitivity 中,非常便利,常用在如投票選項選擇、多個項目列表條列顯示、文件資源管理等。
今天此程序將擴展上篇文章遺留下的問題,完善整個實例的全部功能,需要完成的功能清單如下:
清單如上,下面是實例運行效果圖:
此方法,參數為ListAdapter,上篇我們是利用自己加載的 SimpleAdapter 的適配器做數據源,本篇因為繼承了 ListAcitivity 所以數據源我們可以這樣寫,重寫 BaseAdapter ,具體看問題2;
重寫 BaseAdapter 代碼如下:
@Override
構造函數為引入上篇上下文和數據;
方法一:獲取數據源的總列數;一般來講,我們用 LayoutInflater 做一件事:inflate。inflate這個方法總共有四種形式,目的都是把xml 表述的layout 轉化為View。This class is used to instantiate layout XML file into its corresponding View objects . It is never be used directly -- use getLayoutInflater() or getSystemService(String)getLayoutInflater() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on
A. Context.public abstract Object getSystemService (String name) :Return the handle to a system-level service by name. The class of the returned object varies by the requested name. 具體參見文檔。
B.種獲得LayoutInflater 的方法
(1)通過SystemService獲得LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(2)從給定的context中獲取
C. LayoutInflater.inflate()
將Layout文件轉換為View,顧名思義,專門供Layout使用的Inflater。雖然Layout也是View的子類,但在android中 如果想將xml中的Layout轉換為View放入.java代碼中操作,只能通過Inflater,而不能通過findViewById()。
D.findViewById() 有兩種形式
R.layout.xx 是引用res/layout/xx.xml的布局文件(inflate方法),R.id.xx是引用布局文件裡面的組件,組件的id是xx...(findViewById方法)。看看R.java配置文件吧,R對文件分類管理,多寫幾個layout.xml後你會發現,所有的組件id都能用R.id.xx來查看,但是組件不在setContentView()裡面的layout中就無法使用,Activity.findViewById()會出現空指針異常 。
詳細使用步驟如下:
之後我們在
public View getView(int arg0, View arg1, ViewGroup arg2) {
方法裡面調用方法參數View arg1使用
arg1=myInflater.inflate(R.layout.listview_row, null);
即可得到相應的 View ,得到 View 之後即可以輕松的使用 findViewById() 方法操作控件,並為且設置對應的監聽事件。
4.上篇文章我們留下了一個問題,即如何在長按時能夠得到長按的某一項,並得到項操作相應的業務邏輯,本篇將完成此功能。在繼承 ListAcitivity 類裡聲明 public RelativeLayout myRelative; 此相對布局控件來源於布局XML的布局控件,之後在設置長按事件的處理函數中進行如下操作:
ListViewActivity lv=(ListViewActivity)myContext;
上述代碼為,將上下文引入,得到上下文聲明的相對布局控件,因為方法的參數View 為相應的點擊控件,為了得到布局控件,使用View.getParent() 得到相對的父控件,這裡我用的是 TextView 它放在 RelativeLayout 此控件的下方法,故為getParent(),得到每次點擊項的布局控件後,再重寫onContextItemSelected ,代碼如下:
public boolean onContextItemSelected(MenuItem item) {
這裡有必要解釋一下,這一段實現菜單的選擇功能,應該放在 Activity 代碼類裡面,因為上面我們通過在此類中聲明一個 RelativeLayout 然後當點擊時我們即為它賦值,點擊完某一菜單按鈕後即返回 Activity 頁面,得到布局,我們在這裡要實現的只有通過操作相對布局控件裡面包含的控件然後進行操作即可完全實現 這一功能,在布局控件裡面找控件可用此方法 getChildAt(int index);注意上面條件分支語句不是跳出而是返回一個真。
到此,此功能己經得到實現,在此要感謝以下兩人對我的幫助:QQ:182041935---QQ120460734
源碼下載:/Files/TerryBlog/listViewDemo.rar
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
繼前一篇文章講到Android上的SQLite分頁讀取,其功能只是用文本框顯示數據而已。本文就講得更加深入些,實現並封裝一個SQL分頁表格控件,不僅支持分頁還是以