android 边学边记 2015.10.16

时间:2021-11-21 18:52:38

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里定义的相对应,但在源代码里:

 public Intent setData(Uri data) {
mData = data;
mType = null;
return this;
}

作用是将type设为null。

 setdata  

该函数的参数是uri,所以要将数据通过该函数传递时,记得要把数据转化为uri,如Uri.fromFile(new File("/mnt/sdcard/"))。

 public Intent setType(String type) {
mData = null;
mType = type;
return this;
}

要同时设置data和type的话只能用函数setdataandtype

 public Intent setDataAndType(Uri data, String type) {
mData = data;
mType = type;
return this;
}

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。