zoukankan      html  css  js  c++  java
  • android 边学边记 2015.10.16

    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。

  • 相关阅读:
    【赛前集训】20190902
    【2019csp模拟】树上相交路径
    如何给网站添加SSL证书(西部数码)?
    如何将页面blob类型的视频链接下载下来?
    VUE笔记:运行Vue报错error in ./*xxxxx&lang=scss Syntax Error: TypeError: this.getOptions is not a function
    VUE笔记:Failed to resolve loader: sass-loader
    VUE笔记:VScode(英文版)快速生成VUE模板的设置
    VUE笔记:运行VUE报错 Node Sass version 6.0.1 is incompatible with ^4.0.0.
    VUE笔记:yarn add sass-loader node-sass -dev
    Excel多条件求和:SUM和SUMIFS的综合使用
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/4886550.html
Copyright © 2011-2022 走看看