【正文】
在實(shí)際的運(yùn)行過程中會(huì)發(fā)現(xiàn)listView的每一行沒有焦點(diǎn)了,這是因?yàn)锽utton搶奪了listView的焦點(diǎn),只要布局文件中將Button設(shè)置為沒有焦點(diǎn)就OK了。然后將xml文件中的各個(gè)組件實(shí)例化(簡(jiǎn)單的findViewById()方法)。 } })。 = (TextView)()。 } Override public int getCount() { // TODO Autogenerated method stub return ()。}// ListView 中某項(xiàng)被選中后的邏輯Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { (MyListView4click, (String)(position).get(title))。 (img, )。 MapString, Object map = new HashMapString, Object()。下面的示例將顯示一個(gè)按鈕和一個(gè)圖片,兩行字如果單擊按鈕將刪除此按鈕的所在行。HashMap的每個(gè)鍵值數(shù)據(jù)映射到布局文件中對(duì)應(yīng)id的組件上。 (map)。 (title, G1)。下面的代碼都直接繼承了ListActivity,ListActivity和普通的Activity沒有太大的差別,不同就是對(duì)顯示ListView做了許多優(yōu)化,方面顯示而已。}}復(fù)制代碼 Cursor cursor = getContentResolver().query(, null, null, null, null)。//private ListString data = new ArrayListString()。}}復(fù)制代碼上面代碼使用了ArrayAdapter(Context context, int textViewResourceId, ListT objects)來裝配數(shù)據(jù),要裝配這些數(shù)據(jù)就需要一個(gè)連接ListView視圖對(duì)象和數(shù)組數(shù)據(jù)的適配器來兩者的適配工作,ArrayAdapter的構(gòu)造需要三個(gè)參數(shù),依次為this,布局文件(注意這里的布局文件描述的是列表的每一行的布局,數(shù)據(jù)源(一個(gè)List集合)。 (new ArrayAdapterString(this, ,getData()))。3.?dāng)?shù)據(jù) 具體的將被映射的字符串,圖片,或者基本組件。 case 4: (myMenuResources[3], menu)。 ()?! ?/,這是FrameLayout中的一個(gè)子Layout ?、鄻?biāo)簽切換事件處理,setOnTabChangedListener (new OnTabChangeListener(){ Override public void onTabChanged(String tabId) { // TODO Autogenerated method stub } })?! mport 。 (vLP)?! “堰@個(gè) TextView 加入到 AbsoluteLayout 中,并應(yīng)用上一步創(chuàng)建的 LayoutParams。private View v。Layout 我們通過一個(gè)標(biāo)簽“Text”獲得了和文本相關(guān)的那個(gè)SharedPreferences對(duì)象(“Text”僅僅是自己定義的一個(gè)標(biāo)簽),然后給它賦予一個(gè)“text”對(duì)象值為當(dāng)前文本框中輸入的文本?! ∥覀兿M谝郧暗哪莻€(gè)主界面上點(diǎn)擊按鈕以后可以跳轉(zhuǎn)到文本輸入界面,所以我們需要對(duì)按鈕的onClick事件進(jìn)行定義: 在這段代碼里出現(xiàn)了一些新東西。} setTitle((String)(DataKey))。else if(resultCode == RESULT_OK) { //給bundle 寫入數(shù)據(jù)Intent mIntent = new Intent()。Intent()。()。5. ()。 2個(gè)Activity 的切換,沒有數(shù)據(jù)傳遞1. //從A到B2. Intent .addSubMenu()3. return false。 .add(0, MENU_NEXT, 0, )11.09..setIcon()。 //no more static final MENU_PLAY_PAUSE = 1。14. if(isPlaying()) {05. //go to next song in the playlist12. //toggle play/pause09. //go to previous song in the playlist06. android:icon=android:drawable/ic_menu_next/android:title=string/nextandroid:id=+id/next item!these may not be available in next api (level 3), so be carefullandroid:icon=android:drawable/ic_media_previous/android:enabled=falseandroid:title=string/previousandroid:id=+id/previous item一般情況下,開發(fā)者在res/Layout路徑下來定義應(yīng)用程序的GUI。28. 26. return19. return12. (0,9. //帶圖標(biāo)的menu10. item1)。5. public=ITEM_1_IDintfinish()。//確定按鈕事件8. ()void.show()。提示)3. 這是一個(gè)提示, }} ,(uri)返回值其實(shí)是由 sUriMatcher =new UriMatcher()。Intent深度剖析那么,上面這句startActivity(new Intent(, uri))執(zhí)行后會(huì)發(fā)生什么事情呢?這時(shí)候Android系統(tǒng)就跳出來接管了,它會(huì)根據(jù)intent中的信息找到對(duì)應(yīng)的activity,在這里找到的是NoteEditor這個(gè)activity,然后創(chuàng)建這個(gè)activity的實(shí)例并運(yùn)行。 setListAdapter(adapter)。 Intent intent = getIntent()??梢钥吹矫麨镹otesList的activity節(jié)點(diǎn)下有這樣一個(gè)intentfilter,Category指定為 ,這就指明了這個(gè)activity是作為入口activity,系統(tǒng)查找到它后,就會(huì)創(chuàng)建這個(gè)activity實(shí)例來運(yùn)行,若未發(fā)現(xiàn)就不啟動(dòng)(你可以把MAIN改名字試試)。 android 開發(fā)技巧總匯1目錄最近收集了很多Android的示例代碼,從這些代碼的閱讀和實(shí)驗(yàn)中學(xué)習(xí)到很多知識(shí),從而產(chǎn)生寫這個(gè)系列的打算,目標(biāo)就是一步步跟著實(shí)例進(jìn)行動(dòng)手實(shí)作,真正從“做”中體會(huì)和學(xué)習(xí)Android開發(fā)。第二個(gè)字段COLUMN_INDEX_TITLE指明title字段在數(shù)據(jù)表中的索引。PROJECTION 字段指明了結(jié)果中所需要的字段, 指明了結(jié)果的排序規(guī)則。 if ((action) || (action)) { // The caller is waiting for us to return a note selected by // the user. The have clicked on one, so return it now. setResult(RESULT_OK, new Intent().setData(uri))。 Override public String getType(Uri uri) { switch ((uri)) { case NOTES: return 。于是系統(tǒng)加載這個(gè)類并實(shí)例化,運(yùn)行,然后就到了NoteEditor的OnCreate函數(shù)中(見后續(xù)文章)。這個(gè)提示會(huì)幾秒鐘后消失 才產(chǎn)生一個(gè)提示框.new 還有很多復(fù)雜的用法,有確定和取消的對(duì)話框1. newintvoidstaticintfinal7. //不帶圖標(biāo)的menu8. (0,ITEM_3_ID,onOptionsItemSelected(MenuItemswitch20. 2:21. 22. 另外一種是應(yīng)用Menu,當(dāng)按下Menu按鈕后,會(huì)彈出與當(dāng)前活動(dòng)狀態(tài)下的應(yīng)用程序相匹配的菜單。 }實(shí)現(xiàn)onOptionsItemSelected方法: (其目的是捕捉到菜單觸發(fā)事件后,對(duì)具體觸發(fā)的選項(xiàng)作出響應(yīng),實(shí)際調(diào)用的函數(shù)包含在各自的case中)01.Override boolean onOptionsItemSelected(MenuItem item) {03. 16.}大部分程序都通過這種方式添加Menu菜單功能,而且通過以上的步驟來看,其實(shí)現(xiàn)方法非常簡(jiǎn)單。 //go to previous song in the playlist06. //toggle play/pause09. //go to next song in the playlist12. menu item android:id=+id/all android:title=string/repeat_all/item3. (,blog)。intent ,并添加一個(gè)文本輸入框和一個(gè)按鈕(注意,xml元素的命名不要和其他布局文件中的定義重名,因?yàn)樗械馁Y源都在R中進(jìn)行索引,比如id,.*的時(shí)候就會(huì)有問題了)。好,這里我們已經(jīng)可以調(diào)出新Activity了,我們看一下執(zhí)行的結(jié)果: 你馬上可以想到,現(xiàn)在需要對(duì)新的Activity(Input)進(jìn)行處理了?! ×硗庹f明一下,requestCode是用來標(biāo)識(shí)請(qǐng)求對(duì)象,我們剛才在啟動(dòng)Activity的時(shí)候使用的是“startActivityForResult(intent, 0)”,這里的0就是requestCode,當(dāng)然,你可以設(shè)置成任何你喜歡的值。比如,LinearLayout 中的各個(gè)子 View 按照橫向或者縱向線性排列;而 AbsoluteLayout 中各個(gè)子 View 可以指定以像素為單位的“絕對(duì)”位置。 (Android is a software stack for mobile devices that includes an operating system, middleware and key applications. )。 vLP = new (70, 50, 90, 70)?! 、傩陆ㄒ粋€(gè)Tab項(xiàng)目,注意,不要生成main Activity 這里不要選 ?、谠诎锩嫘陆ㄒ粋€(gè)類MyTab,繼承于TabActivity 其實(shí),TabActivity是Activity的子類 package 。//從TabActivity上面獲取放置Tab的TabHost (this).inflate(, (), true)。 } if ((“Four”)) { myMenuSettingTag = 4?! reak。抽空把對(duì)ListView的使用做了整理,并寫了個(gè)小例子,如下圖。//private ListString data = new ArrayListString()。 (測(cè)試數(shù)據(jù)3)。先在通訊錄中添加一個(gè)聯(lián)系人作為數(shù)據(jù)庫(kù)的數(shù)據(jù)。 ListAdapter listAdapter = new SimpleCursorAdapter(this, , cursor, new String[]{}, new int[]{})。其作用是自動(dòng)的將String型數(shù)組所表示的每一列數(shù)據(jù)映射到布局文件對(duì)應(yīng)id的組件上。 setListAdapter(adapter)。 (title, G2)。 (map)。運(yùn)行效果如下圖: 有按鈕的ListView 但是有時(shí)候,列表不光會(huì)用來做顯示用,我們同樣可以在在上面添加按鈕。 MyAdapter adapter = new MyAdapter(this)。 map = new HashMapString, Object()。 (img, )。 public Button viewBtn。 convertView = (, null)。 ((String)(position).get(tit