• Intent使用方法


    显示Intent

      通过构造函数的重载,创建Intent对象,并用startActivity()启动目标活动。

      目标活动需要在AndroidManifest.xml中注册

    ......
        Intent intent = new Intent(FristActivity.this,SecondActivity.class);
        startActivity(intent);
    ......

    隐式Intent

      指定了一系列的action和category。

      1.在AndroidManifest.xml中添加如下代码:

    1 <activity android:name=".SecondActivity">
    2     <intent-filter>
    3         <action android:name="com.example.activitytest.ACTION_START"/>
    4         <category android:name="andorid.intent.category.DEFAULT"/>
    5     <intent-filter>
    6 </activity>

      只有同时匹配action和category才能响应该intent。

      2.在FirstActivity中的按钮点击事件里加入如下代码

    ......
        public void onClick(View v){
              Intent intent = new Intent("com.example.activitytest.ACTION.START");
              startActivity(intent);    
      }
    ......         

      每个Intent中只能指定一个action,可以指定多个category。

      可以通过Addcategory()方法添加多个category。

      

      使用Intent调用系统浏览器

    ......
        public void onClick(View v){
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("www.baidu.com"));  //解析Uri
            startActivity(intent);
        }
    ......

      可以在AndroidManifest.xml文件中<intent-filter>下<data>标签中指定响应数据的类型。例如:<data android:scheme="http">(android:host、port、path、mimeType)

      除http协议外,还可以在Uri中指定其他协议;geo(地理位置)、tel(拨打电话)等。

      

      Intent传递数据

      使用putExtra()方法传递数据

      

    1 ......
    2     public void onClick(View v) {
    3         String data = "Hello World";
    4         Intent intent = new Intent(FirstAcitivity.this,SecondActivity.class);
    5         intent.putExtra("extra_data",data);  //将数据以键-值对暂存在intent
    6         startActivity(intent);
    7     }
    8 ......

      从intent中获取数据

    1 public class SecondActivity extends appCompatActivity{
    2     @Override
    3     protected void onCreate(Bundle savedInstanceState){
    4         super.onCreate(savedInstanceState);
    5         setContentView(R.layout.second_layout);
    6         Intent intent = getIntent();  //获取intent实例
    7         String data = intent.getStringExtra("extra_data");  //从intent中获取数据
    8     }
    9 }

      返回数据给上一个Activity

      1.在FirstActivity中调用startActivityForRest()方法

    ......
        public void onClick(View v){
            Intent intent = new Intent(FirstActivity.this,SecondAcitvity.class);
            startActivityForResult(intent,1);  //1为请求码,只要是唯一值即可。
        }
    ......

      2.在SecondActivity中注册点击事件

     1 ......
     2     Button button = (Button)findViewById(R.id.button);
     3     button.setOnClickListener(new View.onClickListener){
     4         public void onClick(View v){
     5             Intent intent = new Intent();
     6             intet.putExtra("data_return","Hello FirstActivity");
     7             setResult(RESULT_OK,intent);  //向上一个活动返回数据,两个参数:RESULT_OK/RESULT_CANCELED(处理结果),intent(带有数据的intent)
     8             finish();  //销毁当前活动
     9         }
    10     }
    11 ......

      3.SecondActivity销毁后,回调onActivityResult()方法。在FirstActivity中重写这个方法得到返回数据

    protected void onActivityResult(int requestCode,int resultCode,Intent data){
        switch(requestCode){  //判断数据来源
            case 1:
                if(resultCode == RESULT_OK){  //判断处理结果
                    String retunedData = data.getStringExtra("data_return");  //取值
                }
                break;
            default;
        }
    }

      通过requestCode(请求码)判断数据来源,通过resultCode判断处理结果,再从data中取值。

  • 相关阅读:
    向Word模板中填充数据
    WCF学习笔记之消息交换模式
    Matlab图窗复制后visio中不能取消组合
    Tecplot 360 安装后弹出“Is your Tecplot 360 EX liense valid?”解决方法
    PS操作
    fluent仿真数值错误
    运行程序显示:Could not find version 8.3 of the MCR.
    matlab图片高清复制到visio
    51单片机常用头文件
    逻辑电平
  • 原文地址:https://www.cnblogs.com/yl-saber/p/6380951.html
Copyright © 2020-2023  润新知