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属性,则自动通过测试。

  • 相关阅读:
    第09组 Beta冲刺(3/4)
    第09组 Beta冲刺(2/4)
    第09组 Beta冲刺(1/4)
    第09组 Alpha事后诸葛亮
    王之泰201771010131《面向对象程序设计(java)》第一周学习总结
    正则表达式
    单逻辑运算符和双逻辑运算符的不同之处
    C++11 Java基本数据类型以及转换
    Java中赋值常量的注意事项
    程序命名规则
  • 原文地址:https://www.cnblogs.com/kevincode/p/3851729.html
Copyright © 2011-2022 走看看