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