Android-活动之间的Intent穿梭

  1. 显式Intent穿梭
    首先创建两个活动,及其布局文件。
    活动自动注册完成。
    Intent(,);第一个参数为启动活动的上下文,第二个为启动目标。
    在通过startActivity();方法启动活动。
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Intent intent =new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
  1. 隐式Intent
    主要通过设置action和category来获得
    在xml文件中的secondActivity标签中添加如下代码
            <intent-filter>
                <action android:name="com.example.activity.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>

只能指定一个action,但category可以有多个。
在FirstActivity.java中添加

            public void onClick(View v){
                Intent intent =new Intent("com.example.activity.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }

ps.Intent的相关属性待补充。
ps.隐式部分其他用法待补充。

活动传递数据(向下一个活动)

使用显式方法
利用Intent提供的putExtra(键,数据)方法。
1中关键代码如下

            public void onClick(View v){
                String data = "hello 2";
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);
            }

在2中取出数据
getIntent()方法获取启动活动2的Intent。
getStringExtra()获取数据。
Log中显示。

   Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("SecondActivity",data);

活动中传递数据(向上一个活动)

  1. startActivityForResult(Intent,请求码);
    在1中,利用startActvityForResult()方法。
            public void onClick(View v){
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);
            }

在活动2中注册点击事件。
点击事件中构建Intent,putExtra(,)传入数据。
setResult(处理结果,intent),专门返回数据。
finish();销毁2活动。

            public void onClick(View v){
                Intent intent=new Intent();
                intent.putExtra("data_return","hello 1");
                setResult(RESULT_OK,intent);
                finish();
            }

此时又要把重心3放在1上。
用onActivityResult(请求码,处理结果,intent数据)
首先switch检查请求码,当处理结果==RESULT_OK,获取data中的数据,Log.d()打印。

    @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.d("FirstActivity",returnData);
                }
                break;
            default:
        }
    }
  1. back方法
    重写onBackPressed();
    按下Back,可返回数据
    @Override
    public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("data_r","hello");
        setResult(RESULT_OK,intent);
        finish();
    }

猜你喜欢

转载自blog.csdn.net/WangJiaiaia/article/details/85866181