Android-Intent的使用

2017-09-29  本文已影响0人  其实我很菜啊
什么是Intent

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递参数。Intent一般可被用于启动活动、启动服务以及发送广播。
Intent大致可以分为两种:显示Intent和隐式Intent。Intent有多个构造函数的重载,其中一个是Intent(Context packageContext,Class<?>cls)。这个构造函数接收连个参数,第一个参数Context要求提供一个启动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent要达到的意图。Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的。如

button.setOnClickListener(new View.onClickListener(){
    @Override
    public void onClick(View v){
          Intent intent=new Intent(MainActivity.this,SecondActivity.class);
          startActivity(intent)
    }
})

这一段代码的意思是创建一个Intent对象,传入MainActivity.this作为Context,即在MainActivity这个活动的基础之上打开SecondActivity这个活动。这种就是显示使用Intent。
相比于显示Intent,隐式Intent则含蓄很多,它并不明确指出要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交给系统去分析这个Intent,并找出合适的活动去启动。通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。同样我们要实现在MainActivity页面响应SecondActivity页面,首先是要修改AndroidManifest.xml文件

<activity android:name=".SecondActivity">
      <intent-filter>
            <action android:name="com.example.activity.ACTION_START"/>
            <category  android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
<activity>

然后修改MainActivity中的代码:

button.setOnClickListener(new View.onClickListener(){
    @Override
    public void onClick(View v){
          Intent intent=new Intent(com.example.activity.ACTION_START);
          startActivity(intent)
    }
})

要注意的是只有在<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,活动才能够相应Intent。

使用Intent向活动传递参数

Intent除了用于启动一个新的Activity之外还有一个很重要的作用,即向另一个Activity传递参数。在启动活动时传递参数很简单,Intent中提供了一系列putExtra()方法的重载,把数据暂存到Intent中,启动了另一个活动之后,只需要把这些数据再从Intent中取出就好了。比如说我们需要把FirstActivity中的一个字符串传递到SecondActivity中:

button.setOnClickListener(new View.onClickListener(){
    @Override
    public void onClick(View v){
          String data="Hello World"
          Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
          intent.putExtra("extra_data",data);
          startActivity(intent)
    }
})

在putExtra这个方法中有两个参数,第一个参数是Key第二个即是Value,那么如何在SecondActivity中取出data字符串呢

protected void onCreate(Bundle sacedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.second_layout);
      Intent intent=getIntent();
      String data=intent.getStringExtra("extra_data");
      Log.i("String is",data);
}

在SecondActivity中使用getIntent获取得到启动SecondActivity的Intent,然后调用putStringExtra()方法传入相应的key,就可以取得想要的value了。不同的类型有不同的取值方法要灵活应用。

向上一个活动返回参数

Intent即存在向下一个活动传参,那么必然也会存在向上一个活动传参。在Activity中有一个startActivityForResult()方法,当这个方法期望在活动销毁时能够返回一个结果给上一个活动。嗯我们需要的便是这一个效果了,首先先修改FirstActivity

button.setOnClickListener(new View.onClickListener(){
    @Override
    public void onClick(View v){       
          Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
         startActivityForResult(intent,1);
    }
})

现在我们使用的是 startActivityForResult()方法来启动SecondActivity活动,代码中的"1"只要是一个唯一值即可,修改SecondActivity代码

button2.setOnClickListener(new View.onClickListener(){
    @Override
    public void onClick(View v){       
          Intent intent=new Intent();
          intent.putExtra("data_return","Go to FirstActivity");
          setResult(RESULT_OK,intent);
          finish();
    }
})

这样是否就能达到我们想要的结果呢?那当然是不行咯,我们还没有在FirstActivity中接收SecondActivity的参数呢。当我们销毁SecondActivity活动之后会回调上一个活动的onActivityResult()方法,So我们现在修改一下FirstActivity的代码吧

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
        switch(requestCode){
              case 1:
                      if(resultCode==RESULT_OK){
                          String returnData=data.getStringExtra("data_return");
                          Log.i("I lvoe Android",returnData);    
                      }
                      break;
                   default:
            }
}

onActivityResult()方法有三个参数,requestCode即启动活动时传入的请求码就是那个"1",resultCode是返回数据时传入的处理结果,第三个便是带有参数返回的Intent了。
好了,Intent的常用使用大概就是这些希望能帮助到你

上一篇下一篇

猜你喜欢

热点阅读