標籤:
1、Menu.FIRST在reference中描述為:First value for group and item identifier integers.我們可以理解為ID設定的最小數值。
2、setDefaultKeyMode (int mode) 用來設定一個Activity的預設的按鍵模式,
也就是指這種情況,當Activity中發生了一些按鍵事件,但是這些事件沒有被任何控制項Listen到時(截獲時),
系統應該如何處理這些按鍵事件。
mode一共有五種
- DEFAULT_KEYS_DISABLE //直接丟棄,這種情況你把鍵盤按穿了也不會有系統理你
- DEFAULT_KEYS_DIALER //將鍵盤事件傳入撥號器進行處理
- DEFAULT_KEYS_SHORTCUT //將鍵盤輸入作為當前表單上註冊的快速鍵,進行快速鍵處理
- DEFAULT_KEYS_SEARCH_LOCAL //將鍵盤輸入作為搜尋內容,進行本地搜尋,如果本地沒有實現自訂搜尋,則使用全域搜尋
- DEFAULT_KEYS_SEARCH_GLOBAL //將鍵盤輸入作為搜尋內容,進行全域搜尋
3、intent相關函數解析:
Android中提供了Intent機制來協助應用間的互動與通訊,或者採用更準確的說法是,Intent不僅可用於應用程式之間,也可用於應用程式內部的Activity/Service之間的互動。利用Intent所實現的軟體複用的粒度是Activity/Service,比函數複用更高一些,另外耦合也更為鬆散。
settype
使用該函數表示要尋找檔案的mime類型(如*/*),這個和組件在manifest裡定義的相對應,但在原始碼裡:
1 public Intent setData(Uri data) { 2 mData = data; 3 mType = null; 4 return this; 5 } View Code
作用是將type設為null。
setdata
該函數的參數是uri,所以要將資料通過該函數傳遞時,記得要把資料轉化為uri,如Uri.fromFile(new File("/mnt/sdcard/"))。
1 public Intent setType(String type) { 2 mData = null; 3 mType = type; 4 return this; 5 } View Code
要同時設定data和type的話只能用函數setdataandtype了
1 public Intent setDataAndType(Uri data, String type) { 2 mData = data; 3 mType = type; 4 return this; 5 } View Code
4、setOnCreateContextMenuListener
所有的View 都可以監聽setOnCreateContextMenuListener事件,長按都會彈出操作功能表
View.setOnCreateContextMenuListener(OnCreateContextMenuListener l)
或者在activity裡面註冊view的操作功能表 registerForContextMenu(View view) 重寫 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item){ if (item.getItemId() == 0){ //處理點擊操作功能表事件 } } 處理對應的事件。 -------------------------------------------------------------------------- 長按ListView中的一項item彈出操作功能表 只需要監聽ListView的 setOnCreateContextMenuListener事件即可 然後重寫對應的方法,同上面的一樣。 在onContextItemSelected中擷取 ListView中item對象 @Override public boolean onContextItemSelected(MenuItem item){ AdapterContextMenuInfo itemInfo = (AdapterContextMenuInfo)item.getMenuInfo(); // adapter ListView 中用到的適配器 Object itemValue = adapter.getItem(itemInfo.position); //擷取到item對象後就可以進行任何操作了 } ---------------------------------------------------------------------------- 單擊View彈出操作功能表 View.setOnCreateContextMenuListener(OnCreateContextMenuListener l) View.setOnClickListener(OnClickListener l) 需要同時監聽view的單擊事件和操作功能表事件 然後在View的onClick調用 View.showContextMenu()方法。 如下 View.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ View.showContextMenu(); } ); 然後重新對應的方法,同上一個一樣。 這樣,不論單擊或者長按,都可以彈出操作功能表。 只要能監聽到view對應的事件,應該都可以彈出操作功能表,不過沒有經過測試。
5、解決:在Activity中為什麼要用managedQuery()?
在實際做項目時,有時資料庫經常會報cursor not close的warning,有的cursor你可以手動關閉,但是有一些就不可以了,比如當前是個listActivity,
他的adapter是個cursorAdapter,這裡的cursor就不能關掉,當然你可以在onDestroy中做關閉的操作,可是我比較習慣把cursor定義為局部變數,不是全域可見的,
這樣的話你就不能在onDestroy中關閉了。
後來就查看原始碼,發現manageQuery可以為你維護這個cursor。在你退出activity時為你自動關閉
用getContentResolver().query(...)時有時會報cursor not close的warning。
android 邊學邊記 2015.10.16