zoukankan      html  css  js  c++  java
  • Android组件之间的信使——Intent

    从一个Activity启动到另一个Activity可以使用startActivity()方法或者是startActivityForResult()方法

    第一种:直接启动一个Activity
    Intent intent = new Intent(Main.this, SecondActivity.class);
    startActivity(intent);

    第二种:启动另一个Activity并返回结果
    作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startActivity,也就是说不用两次使用startActivity方法
    startActivityForResult(Intent intent, Int requestCode)
    intent 传给要跳转的Activity的数据和动作

    requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。

    Java代码  收藏代码
    1. public class MainActivity extends Activity {  
    2.     /** Called when the activity is first created. */  
    3.      @Override  
    4.         public void onCreate(Bundle savedInstanceState) {  
    5.             super.onCreate(savedInstanceState);  
    6.             setContentView(R.layout.main);  
    7.             //给按钮添加绑定的事件  
    8.             Button myButton = (Button)findViewById(R.id.myButton);  
    9.             myButton.setText("我的第一个Button");  
    10.             myButton.setOnClickListener(new OnClick());  
    11.         }  
    12.      @Override  
    13.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    14.         System.out.println(requestCode);  
    15.         System.out.println(resultCode);  
    16.     }  
    17.   
    18.      public class OnClick implements OnClickListener{  
    19.   
    20.             @Override  
    21.             public void onClick(View v) {  
    22.                 //生成一个Intent对象  
    23.                 Intent intent = new Intent();  
    24.                 intent.putExtra("testIntent", "testExtra");  
    25.                 intent.setClass(MainActivity.this,SecondActivity.class);  
    26.                 //直接启动一个Activity  
    27. //              startActivity(intent);  
    28.                 //启动一个有返回值的Activity  
    29.                 startActivityForResult(intent, 2);  
    30.             }  
    31.         }  
    32. }  

      
    setResut(int resultCode, Intent intent)
    resultCode如果跳转的Activity子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的RESULT_OK值,没有特殊情况用它就好了,sdk有说明的。
    intent 继续不解释,传回给A的onActivityResult()


    onActivityResult(int requestCode, int resultCode, Intent intent)
    这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A  onActivityResult()会无差别处理

    Java代码  收藏代码
    1. public class SecondActivity extends Activity{  
    2.     @Override  
    3.     protected void onCreate(Bundle savedInstanceState) {  
    4.         // TODO Auto-generated method stub  
    5.         super.onCreate(savedInstanceState);  
    6.         this.setContentView(R.layout.other);  
    7.         Button btn = (Button)findViewById(R.id.otherButton);  
    8.         btn.setOnClickListener(new Button.OnClickListener(){  
    9.             @Override  
    10.             public void onClick(View v) {  
    11.                 Intent intent = getIntent();  
    12.                 setResult(3, intent);  
    13.                 finish();  
    14.             }  
    15.         });  
    16.     }  
    17. }  

    如何使用自定义的Action属性?
    1、定义一个自定义的Action名称——常量

    Java代码  收藏代码
    1. public static final String MY_ACTION = "hb.com.MY_ACTION";  

     
    2、使用一个按钮然后给其绑定事件,让它跳转到另一个Activity

    Java代码  收藏代码
    1. myActionBtn.setOnClickListener(new Button.OnClickListener(){  
    2.     @Override  
    3.     public void onClick(View v) {  
    4.         System.out.println("myActionBtn");  
    5. //                  Intent intent = getIntent();  
    6. // 这里一定要new一个Intent对象,如果用上面的则打开的是当前的Activity  
    7.         Intent intent = new Intent();  
    8.         intent.setAction(MY_ACTION);  
    9.         startActivity(intent);  
    10.     }  
    11. });  

    3、在AndroidManifest.xml配置文件中添加Activity的名称

    Xml代码  收藏代码
    1. <activity android:name=".SecondActivity" android:label="@string/secondActivity">  
    2.     <intent-filter>  
    3.         <action android:name="hb.com.MY_ACTION" />  
    4.         <category android:name="android.intent.category.DEFAULT" />  
    5.     </intent-filter>  
    6. </activity>  

    备注:hb.com.MY_ACTION这个值与intent.setAction(MY_ACTION);值是一样的
    activity标签在application标签内部
    category这个属性在Intent Filter中必须出现,否则不能测试通过

    Intent的Data属性是指定动作的URI和MIME类型,不同的Action有不同的Data数据指定
    Intent中的Category属性是一个执行Action的附加信息
    Intent的Extras属性是添加一些组件的附加信息

    Java代码  收藏代码
    1. //显示_id为1的联系人信息  
    2. data = "content://contacts/people/1";  
    3. uri = Uri.parse(data);  
    4. //ACTION_VIEW显示数据给用户  
    5. intent.setAction(Intent.ACTION_VIEW);  
    6. intent.setData(uri);  
    7. startActivity(intent);  
    8.   
    9.   
    10. //编辑_id为1的联系人信息  
    11. data = "content://contacts/people/1";  
    12. uri = Uri.parse(data);  
    13. //ACTION_EDIT显示可编辑数据  
    14. intent.setAction(Intent.ACTION_EDIT);  
    15. intent.setData(uri);  
    16. startActivity(intent);  
    17.   
    18.   
    19. //显示拨打电话的界面  
    20. data = "tel:13811111111";  
    21. uri = Uri.parse(data);  
    22. //ACTION_DIAL显示拨打电话的面板  
    23. intent.setAction(Intent.ACTION_DIAL);  
    24. intent.setData(uri);  
    25. startActivity(intent);  
    26.   
    27.   
    28. //直接拨打电话  
    29. data = "tel:13811111111";  
    30. uri = Uri.parse(data);  
    31. //ACTION_CALL直接打电话  
    32. intent.setAction(Intent.ACTION_CALL);  
    33. intent.setData(uri);  
    34. startActivity(intent);  
    35.   
    36.   
    37. //访问浏览器  
    38. data = "http://www.baidu.com";  
    39. uri = Uri.parse(data);  
    40. //ACTION_VIEW显示数据给用户  
    41. intent.setAction(Intent.ACTION_VIEW);  
    42. intent.setData(uri);  
    43. startActivity(intent);  
    44.   
    45.   
    46. //访问地图  
    47. data = "geo://39.92,116.46";  
    48. uri = Uri.parse(data);  
    49. //ACTION_VIEW显示数据给用户  
    50. intent = new Intent(Intent.ACTION_VIEW,uri);  
    51. startActivity(intent);  

     <intent-filter>列表中的action不能为空,否则程序阻塞不能通过。
    如果Intent对象指定了一个Action属性,那么要想通过Action测试,Intent对象指定的属性必须和Intent Filter中的匹配,否则不能通过测试。
    如果Intent对象中没有指定Action属性,则自动通过测试。

  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/kevincode/p/3851729.html
Copyright © 2011-2022 走看看