ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何使用Intent在活动中穿梭

2019-07-06 18:36:48  阅读:255  来源: 互联网

标签:SecondActivity void 如何 穿梭 Intent intent 活动 data


显式Intent的使用

  • Intent的 Intent(Context packageContext,Class<?> cls),这个函数中,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。Activity类中提供一个startActivity()方法,专门用来启动活动
button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
     }
 });

隐式Intent的使用

  • 隐式Intent不明确指出要启动哪个活动,而是指定了一系列更为抽象的action和category等信息,由系统分析Intent并帮我们找出合适的活动去启动。
  • 只有<action>和<category>中的内容同时能匹配上Intent中指定的action和category时,这个活动才能响应这个Intent。
  • 一个Intent中只能指定一个action,而可以指定多个category。可以调用Intent中的addCategory()来添加一个category,添加之后,需要在<intent-filter>标签中添加一个category的声明,否则会导致程序的崩溃。

向下一个活动传递数据

  • Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递数据暂存在Intent中,启动了另一个活动之后,只需把这些数据再从Intent中拿出来即可。
public void onClcik(View v){
    String data = "Hello SecondActivity";
    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    intent.putExtra("extra_data",data);
    startActivity(intent);
}

putExtra()方法中接收两个参数,第一个是键,用于后面从Intent中取值,第二个才是真正要传递的数据。

  • 如上代码所示,将字符串data存储在Intent中后,要在SecondActivity中用到时,方法如下所示:
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);
    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");
    Log.d("SecondActivity",data);
 }

首先通过getIntent()方法获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应键值。

返回数据给上一个活动

  • Activity中还有一个startActivityForResult()方法,期望在活动销毁时能返回一个结果给上一个活动。这个方法有两个参数,第一个仍是intent,第二个是请求码,用于在之后的回调中判断数据的来源。
button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
        startActivityForResult(intent,1);
    }
}

这里使用startActivityForResult()方法来启动SecondActivity,请求码只要是一个唯一值即可。在SecondActivity中给按钮注册点击事件,并在点击事件添加返回数据的逻辑

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);    
    Button button2 = (Button) findViewById(R.id.button_2);
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.putExtra("data_return", "Hello FirstActivity");
            setResult(RESULT_OK, intent);
            finish();
        }
    });
}

这里构建的Intent仅用于传输数据。把数据存储在Intent中后,调用了setResult()方法,专门用于向上一个活动返回数据的。此方法接收两个参数,第一个用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED,第二个则是把带有数据的Intent传递回去,然后用finish()方法销毁当前活动。

  • 由于我们是使用startActivityForResult()方法来启动SecondActivity的,活动被销毁后会回调回上一个活动的onActivityResult()方法,因此我们需要重写这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                String returnedData = data.getStringExtra("data_return");
                Log.d("FirstActivity", returnedData);
            }
            break;
        default:
    }
}

onActivityResult()方法中有三个参数,第一个requestCode,即在启动活动时传入的请求码(判断数据来源的依据)。第二个是resultCode,即在我们返回数据时传入的处理结果(判读数据处理是否成功)。第三个是data,即携带数据返回的Intent。

 

标签:SecondActivity,void,如何,穿梭,Intent,intent,活动,data
来源: https://blog.csdn.net/weixin_43568110/article/details/94863165

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有