安卓ListActivity開發(fā)手冊參考模板_第1頁
安卓ListActivity開發(fā)手冊參考模板_第2頁
安卓ListActivity開發(fā)手冊參考模板_第3頁
安卓ListActivity開發(fā)手冊參考模板_第4頁
安卓ListActivity開發(fā)手冊參考模板_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ListActivity應用程序開發(fā)手冊目 錄1 / 171 listActivity 簡介21.1 listActivity事件響應41.1.1. 列表被點擊事件41.1.2. 列表獲得焦點事件51.2 使用simpleAdapter61.3 使用SimpleCursorAdapter91.4 定制自己的Adapter101.5 可擴展ListActivity121.6 具有下拉列表的ListActivity152 附錄一 文檔示例源代碼161 listActivity 簡介ListActivity 直接繼承于activity,是用來在屏幕中顯示一個列表的窗口應用程序,當點擊窗口中的某一列時

2、,可以觸發(fā)一些操作,ListActivity是手機基本應用中最常用的一類應用程序。為了實現(xiàn)ListActivity顯示數(shù)據(jù),我們需要把我們的數(shù)據(jù)綁定到一個繼承于BaseAdapter的對象上。簡單來說,listActivity應用的adapter的數(shù)據(jù)源主要有arrary和cursor,先看一個簡單的例子。跟普通的activity程序一樣,程序首先創(chuàng)建一個繼承于ListActivity的子類,然后重載onCreate方法。程序第31行,開始設置應用于listActivity的一個ListActivity,參數(shù)android.R.layout. simple_list_item_1是一個Text

3、View的配置文件,用來設置列表中每一行的顯示窗口。mString是一個字符串數(shù)組,用來保存要存放的數(shù)據(jù)。這個簡單的程序運行效果如下:每一個ListActivity系統(tǒng)都會給它指定默認的窗口布局,因此不需要我們setContentView(),但是我們也可以指定窗口的布局,如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layou

4、t_height="fill_parent" android:orientation="vertical"><ListView android:id="id/android:list"android:background="#00FF00" android:layout_weight="2" android:drawSelectorOnTop="false" android:layout_width="wrap_content" android

5、:layout_height="wrap_content"/> <TextView android:id="id/android:empty" android:layout_width="wrap_content" android:layout_height="wrap_content"android:background="#FF0000" android:text="string/no_notes"/> </LinearLayout>這里需要

6、注意的是那個ListView的ID,是系統(tǒng)自定義的android:list,不是我們隨便取的,否則系統(tǒng)會說找不到它想要的listview了。然后,在這個listview之外,我們又增加了一個TextView,這個系統(tǒng)自定義的id是Android:empty,當列表中沒有數(shù)據(jù)時,屏幕變成紅色來顯示一個no_notes 的文本。1.1 listActivity事件響應對于listActivity中顯示的列表,我們可以重載一些函數(shù)來響應我們應該處理的事件。listActivity繼承于activity,同時組合了listView,因此一把用于activity上的回調函數(shù)應用在listActivity

7、上,同時也可以通過getListView獲得當前的listView的引用,對這個listView來設置一些監(jiān)聽對象來完成listView傻瓜響應的特定功能,本節(jié)簡要介紹兩個長用回調函數(shù),其他的由開發(fā)人員慢慢分析。1.1.1. 列表被點擊事件某一列主題被點擊事件,我們需要重載回調函數(shù):protected void onListItemClick(ListView l, View v, int position, long id) / add your code參數(shù) ListView l 是你點擊的列表控件,View v是你當前正點擊的在ListView中的一項,positon 是被點擊的行在列表

8、中的位置,這個位置從0開始算起,id 是被點擊的行號。 * param l The ListView where the click happened * param v The view that was clicked within the ListView * param position The position of the view in the list * param id The row id of the item that was clicked比如我們要獲取當前點擊的行中的內容在,可以這么做:protected void onListItemClick(ListView

9、 l, View v, int position, long id) / add your codeTextView text = (TextView)l.getItemAtPosition(position); String myItem = text.getText();通過getItemAtPosition(position)返回的是一個view對象,這個對象需要你強制轉換成你事實中正使用的對象類型。這一點請關注后面的Cursor和一些自己定義的Adapter情況。1.1.2. 列表獲得焦點事件對于列表獲得焦點事件,我們可以直接接在它組合的listView上注冊獲得焦點函數(shù)來完成,在on

10、Create函數(shù)中添加以下代碼: this.getListView().setOnItemSelectedListener(new OnItemSelectedListener() Override public void onItemSelected(AdapterView parent, View v,int position, long id) showAlert(CharSequence)"Selection Changed.", R.drawable.star_big_on,(CharSequence)("Position: " + posit

11、ion), (CharSequence)("OK"), false); Override public void onNothingSelected(AdapterView arg0) / Do Nothing );這個注冊的監(jiān)聽事件,是當有一行被選擇時(高亮度顯示),會出現(xiàn)一個對話框提示你正選擇的位置。1.2 使用simpleAdaptersimpleAdapter跟其名字大不一樣,使用起來必ArraryAdapter稍微復雜一些:使用這個simpleAdapter主要出現(xiàn)在自己要指定一個list<map>的數(shù)據(jù)映射的時候,還是先看看簡單的例子。第36行,創(chuàng)建

12、一個繼承于listActivity的子類。第41行,設置這個窗口程序的listView界面布局。第42行,設置listActivity的和listView之間的數(shù)據(jù)適配器,這個適配器的地一個參數(shù)是當前的對象,第二個參數(shù)是我們要用到的映射成map的list結構數(shù)據(jù),第三個參數(shù)是每一行列表的布局,可以看看這個布局文件是兩個textView,第四個參數(shù)是一個字符串數(shù)組,設置了map對象中文本顯示的順序,第五個參數(shù)依次把第四個參數(shù)數(shù)組中應該映射的文本依次映射到listView中每一行的布局上去。第46行,是生成一個list<map<string,string> >對象,用來保存

13、當前的數(shù)據(jù)。本節(jié)程序的源代碼見附件 Simple_adapter工程程序的配置文件依次如下,layout.main<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <L

14、istView android:id="id/android:list" android:layout_weight="2" android:drawSelectorOnTop="false" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="id/android:empty" android:layout_width=&

15、quot;wrap_content" android:layout_height="wrap_content" android:text="no data"/> </LinearLayout>Layout.list_item<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" android:orientation="vertical" android:lay

16、out_width="fill_parent" android:layout_height="fill_parent" ><TextView android:id="+id/item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="28sp" android:textColor="#FF0000"/> &

17、lt;TextView android:id="+id/item2" android:layout_width="wrap_content" android:textSize="18sp" android:textColor="#00FF00" android:layout_height="wrap_content"/></LinearLayout>程序運行的效果如下:1.3 使用SimpleCursorAdapterSimpleCursorAdapter是把數(shù)據(jù)庫中查詢到的結

18、果映射到listView的方式,這個類的使用方式跟SimpleAdapter中的例子方式類似,本文不作細講,主要說說數(shù)據(jù)映射段。首先是通過數(shù)據(jù)庫查找數(shù)據(jù),數(shù)據(jù)保存在Cursor類的對象cursor中。Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, Notes.DEFAULT_SORT_ORDER);然后開始把數(shù)據(jù)映射到SimpleCursorAdapter對象,這個對象的第二個參數(shù)是列表中每一行的布局,第三個參數(shù)是當前保存查詢出數(shù)據(jù)的游標。第四個參數(shù)和第五個參數(shù)跟SimpleAdapter中

19、對應的參數(shù)相同。SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.noteslist_item, cursor,new String Notes.TITLE , new int android.R.id.text1 );把映射的SimpleCursorAdapter對象設置到listActivity中。setListAdapter(adapter);然后其他的應用方式跟listActivity方式完全一樣。1.4 定制自己的Adapter由于目前android還不夠強大,很多l(xiāng)istAdapter需要我們自

20、己定制,因此我們可以根據(jù)我們的需要創(chuàng)建一個繼承于BaseAdapter的類,然后把我們自己定制的對象設置到listActivity中。比如我們要創(chuàng)建一個列表,列表的前面是一個圖標,后面是文本??蠢尤缦拢合葎?chuàng)建每一行中顯示的View,如下:public static class ImageTextView extends LinearLayout public TextView mTextView; public ImageView mImageView; public ImageTextView(Context context, String title, Drawable drawable

21、) super(context); this.setOrientation(HORIZONTAL); mImageView = new ImageView(context); mImageView.setImageDrawable(drawable); mImageView.setPadding(0, 2, 5, 2); addView(mImageView, new LinearLayout.LayoutParams(40, 30); mTextView = new TextView(context); mTextView.setText(title); mTextView.setTextS

22、ize(18); addView(mTextView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, 30); 這個表示是一個線形布局的view,這個view中有一個TextView和一個ImageView。構造函數(shù)中設置這兩個view的布局方式是水平布局,接著設置這兩個組合的view的顯示方式和位置。然后創(chuàng)建一個我們自己的繼承于BaseAdapter的子類,創(chuàng)建繼承于BaseAdapter的子類必須重載5個函數(shù)。public class ListCombinAdapter extends BaseAdapter priva

23、te Context mContext; private List<ImageTextView> mObjects; public ListCombinAdapter(Context ctx) mContext = ctx; mObjects = new ArrayList<ImageTextView>(); public int getCount() return mObjects.size(); public Object getItem(int position) return mObjects.get(position); public int getPosit

24、ion(Object item) return mObjects.indexOf(item); public long getItemId(int position) return (long)position; public View getView(int position, View convertView, ViewGroup parent) ImageTextView itv; if (convertView=null) itv = new ImageTextView(mContext,(String)mObjects.get(position).mTextView.getText(

25、), mObjects.get(position).mImageView.getDrawable(); else itv = (ImageTextView)convertView; itv.mTextView = mObjects.get(position).mTextView; itv.mImageView = mObjects.get(position).mImageView; return itv; public void addItem(String text,Drawable drawable) mObjects.add(new ImageTextView(mContext,text

26、,drawable); 最后在listActivity的onCreate中設置我們的listActivity,如下: Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); ListCombinAdapter listAda = new ListCombinAdapter(this); listAda.addItem("music", etResources().getDrawable(R.drawable.icon48x48_1); listA

27、da.addItem("home", getResources().getDrawable(R.drawable.icon48x48_2); setListAdapter(listAda); 本例子中只創(chuàng)建了兩行文本,程序運行效果如下:當然,本例子中創(chuàng)建的ImageTextView,也可以通過設置配置文本的方式來設置布局。本節(jié)程序源代碼見附件中的工程里斯塔CombinAdapter1.5 可擴展ListActivity制作可擴展效果的ListActivity,可以利用在每一列List中,設置多行文本或圖形控件,當鼠標點擊該行列表時,列表中隱藏的一行文本顯示出來,當再次點擊該

28、行時,該行的一行文本又隱藏起來,達到列表內容可擴展的效果,這種控件顯示行為可通過設置控件的VISIBLE來達到效果。如下例子效果:實現(xiàn)這種效果的關鍵算法制定一個自己的listAdapter,這個listAdapter在接收到列表點擊事件時,交替設置該行列表中視圖的某個控件的可見性,view.setVisibility(GONE)或者view.setVisibility(VISIBLE)。然后發(fā)送數(shù)據(jù)改變通知:notifyDataSetChanged();對于每一行的View視圖,要有一個字段保存當前某個控件是否可變的信息,通過這個信息來在鼠標點擊該行時交替設置控件的可見性,關鍵代碼如下:程序第83行,創(chuàng)建一個基于LinearLayout的viewGroup。程序第87行至99行,設置這個ext

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論