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

下載本文檔

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

文檔簡(jiǎn)介

1、ListActivity應(yīng)用程序開發(fā)手冊(cè)目 錄1 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,是用來在屏幕中顯示一個(gè)列表的窗口應(yīng)用程序,當(dāng)點(diǎn)擊窗口中的某一列時(shí),可以觸發(fā)一

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

3、置文件,用來設(shè)置列表中每一行的顯示窗口。mString是一個(gè)字符串?dāng)?shù)組,用來保存要存放的數(shù)據(jù)。這個(gè)簡(jiǎn)單的程序運(yùn)行效果如下:每一個(gè)ListActivity系統(tǒng)都會(huì)給它指定默認(rèn)的窗口布局,因此不需要我們setContentView(),但是我們也可以指定窗口的布局,如下: 這里需要注意的是那個(gè)ListView的ID,是系統(tǒng)自定義的android:list,不是我們隨便取的,否則系統(tǒng)會(huì)說找不到它想要的listview了。然后,在這個(gè)listview之外,我們又增加了一個(gè)TextView,這個(gè)系統(tǒng)自定義的id是Android:empty,當(dāng)列表中沒有數(shù)據(jù)時(shí),屏幕變成紅色來顯示一個(gè)no_notes 的文

4、本。1.1 listActivity事件響應(yīng)對(duì)于listActivity中顯示的列表,我們可以重載一些函數(shù)來響應(yīng)我們應(yīng)該處理的事件。listActivity繼承于activity,同時(shí)組合了listView,因此一把用于activity上的回調(diào)函數(shù)應(yīng)用在listActivity上,同時(shí)也可以通過getListView獲得當(dāng)前的listView的引用,對(duì)這個(gè)listView來設(shè)置一些監(jiān)聽對(duì)象來完成listView傻瓜響應(yīng)的特定功能,本節(jié)簡(jiǎn)要介紹兩個(gè)長(zhǎng)用回調(diào)函數(shù),其他的由開發(fā)人員慢慢分析。1.1.1. 列表被點(diǎn)擊事件某一列主題被點(diǎn)擊事件,我們需要重載回調(diào)函數(shù):protected void onLi

5、stItemClick(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)擊的行在列表中的位置,這個(gè)位置從0開始算起,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

6、 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 l, View v, int position, long id) / add your codeTextView text = (TextView)l.getItemAtPosition(position); String myItem = text.getText();通過getItemAtPosition(pos

7、ition)返回的是一個(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ù)來完成,在onCreate函數(shù)中添加以下代碼: this.getListView().setOnItemSelectedListener(new OnItemSelectedListener() Override public void onItemSelected(AdapterView parent, View v,int pos

8、ition, long id) showAlert(CharSequence)Selection Changed., R.drawable.star_big_on,(CharSequence)(Position: + position), (CharSequence)(OK), false); Override public void onNothingSelected(AdapterView arg0) / Do Nothing );這個(gè)注冊(cè)的監(jiān)聽事件,是當(dāng)有一行被選擇時(shí)(高亮度顯示),會(huì)出現(xiàn)一個(gè)對(duì)話框提示你正選擇的位置。1.2 使用simpleAdaptersimpleAdapter跟其名

9、字大不一樣,使用起來必ArraryAdapter稍微復(fù)雜一些:使用這個(gè)simpleAdapter主要出現(xiàn)在自己要指定一個(gè)list的數(shù)據(jù)映射的時(shí)候,還是先看看簡(jiǎn)單的例子。第36行,創(chuàng)建一個(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ù)依次把第

10、四個(gè)參數(shù)數(shù)組中應(yīng)該映射的文本依次映射到listView中每一行的布局上去。第46行,是生成一個(gè)listmap 對(duì)象,用來保存當(dāng)前的數(shù)據(jù)。本節(jié)程序的源代碼見附件 Simple_adapter工程程序的配置文件依次如下,layout.main Layout.list_item 程序運(yùn)行的效果如下:1.3 使用SimpleCursorAdapterSimpleCursorAdapter是把數(shù)據(jù)庫中查詢到的結(jié)果映射到listView的方式,這個(gè)類的使用方式跟SimpleAdapter中的例子方式類似,本文不作細(xì)講,主要說說數(shù)據(jù)映射段。首先是通過數(shù)據(jù)庫查找數(shù)據(jù),數(shù)據(jù)保存在Cursor類的對(duì)象cursor

11、中。Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, Notes.DEFAULT_SORT_ORDER);然后開始把數(shù)據(jù)映射到SimpleCursorAdapter對(duì)象,這個(gè)對(duì)象的第二個(gè)參數(shù)是列表中每一行的布局,第三個(gè)參數(shù)是當(dāng)前保存查詢出數(shù)據(jù)的游標(biāo)。第四個(gè)參數(shù)和第五個(gè)參數(shù)跟SimpleAdapter中對(duì)應(yīng)的參數(shù)相同。SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.noteslist_item, curso

12、r,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需要我們自己定制,因此我們可以根據(jù)我們的需要?jiǎng)?chuàng)建一個(gè)繼承于BaseAdapter的類,然后把我們自己定制的對(duì)象設(shè)置到listActivity中。比如我們要?jiǎng)?chuàng)建一個(gè)列表,列表的前面是一個(gè)圖標(biāo),后面是文本??蠢?/p>

13、子如下:先創(chuàng)建每一行中顯示的View,如下:public static class ImageTextView extends LinearLayout public TextView mTextView; public ImageView mImageView; public ImageTextView(Context context, String title, Drawable drawable) super(context); this.setOrientation(HORIZONTAL); mImageView = new ImageView(context); mImageView

14、.setImageDrawable(drawable); mImageView.setPadding(0, 2, 5, 2); addView(mImageView, new LinearLayout.LayoutParams(40, 30); mTextView = new TextView(context); mTextView.setText(title); mTextView.setTextSize(18); addView(mTextView, new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, 30); 這個(gè)表示是一個(gè)

15、線形布局的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 private Context mContext; private List mObjects; public ListCombinAdapter(Context ctx) mContext = ctx;

16、mObjects = new ArrayList(); public int getCount() return mObjects.size(); public Object getItem(int position) return mObjects.get(position); public int getPosition(Object item) return mObjects.indexOf(item); public long getItemId(int position) return (long)position; public View getView(int position,

17、 View convertView, ViewGroup parent) ImageTextView itv; if (convertView=null) itv = new ImageTextView(mContext,(String)mObjects.get(position).mTextView.getText(), mObjects.get(position).mImageView.getDrawable(); else itv = (ImageTextView)convertView; itv.mTextView = mObjects.get(position).mTextView;

18、 itv.mImageView = mObjects.get(position).mImageView; return itv; public void addItem(String text,Drawable drawable) mObjects.add(new ImageTextView(mContext,text,drawable); 最后在listActivity的onCreate中設(shè)置我們的listActivity,如下: Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInst

19、anceState); ListCombinAdapter listAda = new ListCombinAdapter(this); listAda.addItem(music, etResources().getDrawable(R.drawable.icon48x48_1); listAda.addItem(home, getResources().getDrawable(R.drawable.icon48x48_2); setListAdapter(listAda); 本例子中只創(chuàng)建了兩行文本,程序運(yùn)行效果如下:當(dāng)然,本例子中創(chuàng)建的ImageTextView,也可以通過設(shè)置配置文本的

20、方式來設(shè)置布局。本節(jié)程序源代碼見附件中的工程里斯塔CombinAdapter1.5 可擴(kuò)展ListActivity制作可擴(kuò)展效果的ListActivity,可以利用在每一列List中,設(shè)置多行文本或圖形控件,當(dāng)鼠標(biāo)點(diǎn)擊該行列表時(shí),列表中隱藏的一行文本顯示出來,當(dāng)再次點(diǎn)擊該行時(shí),該行的一行文本又隱藏起來,達(dá)到列表內(nèi)容可擴(kuò)展的效果,這種控件顯示行為可通過設(shè)置控件的VISIBLE來達(dá)到效果。如下例子效果:實(shí)現(xiàn)這種效果的關(guān)鍵算法制定一個(gè)自己的listAdapter,這個(gè)listAdapter在接收到列表點(diǎn)擊事件時(shí),交替設(shè)置該行列表中視圖的某個(gè)控件的可見性,view.setVisibility(GONE

21、)或者view.setVisibility(VISIBLE)。然后發(fā)送數(shù)據(jù)改變通知:notifyDataSetChanged();對(duì)于每一行的View視圖,要有一個(gè)字段保存當(dāng)前某個(gè)控件是否可變的信息,通過這個(gè)信息來在鼠標(biāo)點(diǎn)擊該行時(shí)交替設(shè)置控件的可見性,關(guān)鍵代碼如下:程序第83行,創(chuàng)建一個(gè)基于LinearLayout的viewGroup。程序第87行至99行,設(shè)置這個(gè)externView的兩個(gè)TextView的布局。程序第100行,設(shè)置這個(gè)view中的mNumber初始不可見。程序第102行至105行,反向設(shè)置mNumber的可見性,當(dāng)前可見這設(shè)置成不可見,當(dāng)前不可見這設(shè)置成可見。程序第107行至110行,根據(jù)所帶參數(shù)是true還是false來設(shè)置mNumber的可見和不可見。程序第31行,響應(yīng)列表被點(diǎn)擊時(shí)的回調(diào)函數(shù)。程序第33行,獲取當(dāng)前的listAdapter,強(qiáng)制轉(zhuǎn)換成externListAdapter,然后做p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論