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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

3、View的配置文件,用來(lái)設(shè)置列表中每一行的顯示窗口。mString是一個(gè)字符串?dāng)?shù)組,用來(lái)保存要存放的數(shù)據(jù)。這個(gè)簡(jiǎn)單的程序運(yùn)行效果如下:每一個(gè)ListActivity系統(tǒng)都會(huì)給它指定默認(rèn)的窗口布局,因此不需要我們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、注意的是那個(gè)ListView的ID,是系統(tǒng)自定義的android:list,不是我們隨便取的,否則系統(tǒng)會(huì)說(shuō)找不到它想要的listview了。然后,在這個(gè)listview之外,我們又增加了一個(gè)TextView,這個(gè)系統(tǒng)自定義的id是Android:empty,當(dāng)列表中沒(méi)有數(shù)據(jù)時(shí),屏幕變成紅色來(lái)顯示一個(gè)no_notes 的文本。1.1 listActivity事件響應(yīng)對(duì)于listActivity中顯示的列表,我們可以重載一些函數(shù)來(lái)響應(yīng)我們應(yīng)該處理的事件。listActivity繼承于activity,同時(shí)組合了listView,因此一把用于activity上的回調(diào)函數(shù)應(yīng)用在listActivity

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

8、中的位置,這個(gè)位置從0開(kāi)始算起,id 是被點(diǎn)擊的行號(hào)。 * 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比如我們要獲取當(dāng)前點(diǎn)擊的行中的內(nèi)容在,可以這么做:protected void onListItemClick(ListView

9、 l, View v, int position, long id) / add your codeTextView text = (TextView)l.getItemAtPosition(position); String myItem = text.getText();通過(guò)getItemAtPosition(position)返回的是一個(gè)view對(duì)象,這個(gè)對(duì)象需要你強(qiáng)制轉(zhuǎn)換成你事實(shí)中正使用的對(duì)象類型。這一點(diǎn)請(qǐng)關(guān)注后面的Cursor和一些自己定義的Adapter情況。1.1.2. 列表獲得焦點(diǎn)事件對(duì)于列表獲得焦點(diǎn)事件,我們可以直接接在它組合的listView上注冊(cè)獲得焦點(diǎn)函數(shù)來(lái)完成,在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 );這個(gè)注冊(cè)的監(jiān)聽(tīng)事件,是當(dāng)有一行被選擇時(shí)(高亮度顯示),會(huì)出現(xiàn)一個(gè)對(duì)話框提示你正選擇的位置。1.2 使用simpleAdaptersimpleAdapter跟其名字大不一樣,使用起來(lái)必ArraryAdapter稍微復(fù)雜一些:使用這個(gè)simpleAdapter主要出現(xiàn)在自己要指定一個(gè)list<map>的數(shù)據(jù)映射的時(shí)候,還是先看看簡(jiǎn)單的例子。第36行,創(chuàng)建

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

13、當(dāng)前的數(shù)據(jù)。本節(jié)程序的源代碼見(jiàn)附件 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>程序運(yùn)行的效果如下:1.3 使用SimpleCursorAdapterSimpleCursorAdapter是把數(shù)據(jù)庫(kù)中查詢到的結(jié)

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

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

20、己定制,因此我們可以根據(jù)我們的需要?jiǎng)?chuàng)建一個(gè)繼承于BaseAdapter的類,然后把我們自己定制的對(duì)象設(shè)置到listActivity中。比如我們要?jiǎng)?chuàng)建一個(gè)列表,列表的前面是一個(gè)圖標(biāo),后面是文本。看例子如下:先創(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); 這個(gè)表示是一個(gè)線形布局的view,這個(gè)view中有一個(gè)TextView和一個(gè)ImageView。構(gòu)造函數(shù)中設(shè)置這兩個(gè)view的布局方式是水平布局,接著設(shè)置這兩個(gè)組合的view的顯示方式和位置。然后創(chuàng)建一個(gè)我們自己的繼承于BaseAdapter的子類,創(chuàng)建繼承于BaseAdapter的子類必須重載5個(gè)函數(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中設(shè)置我們的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)建了兩行文本,程序運(yùn)行效果如下:當(dāng)然,本例子中創(chuàng)建的ImageTextView,也可以通過(guò)設(shè)置配置文本的方式來(lái)設(shè)置布局。本節(jié)程序源代碼見(jiàn)附件中的工程里斯塔CombinAdapter1.5 可擴(kuò)展ListActivity制作可擴(kuò)展效果的ListActivity,可以利用在每一列List中,設(shè)置多行文本或圖形控件,當(dāng)鼠標(biāo)點(diǎn)擊該行列表時(shí),列表中隱藏的一行文本顯示出來(lái),當(dāng)再次點(diǎn)擊該

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論