美文网首页
Android-Intent的使用

Android-Intent的使用

作者: 其实我很菜啊 | 来源:发表于2017-09-29 20:17 被阅读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的常用使用大概就是这些希望能帮助到你

    相关文章

      网友评论

          本文标题:Android-Intent的使用

          本文链接:https://www.haomeiwen.com/subject/qdmeextx.html