Android 开发入门-使用 Intent 在活动之间穿梭

2.3 使用 Intent 在活动之间穿梭

2.3.1 使用显式 Intent

# app/src/main/res/layout/second_layout.xml




    
# app/src/main/java/com/example/activitytest/SecondActivity.java

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
    }
}
# app/src/main/AndroidManifest.xml




    
                             #指定活动标题
            
                   #设为主活动
                 #设为启动器
            
        
                                    #注册第二个活动
        
    

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 实例化 Intent,第一个参数为当前上下文,第二个参数为要启动的目标活动
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                // 启动目标活动
                startActivity(intent);
            }
        });
    }

2.3.2 使用隐式 Intent


    
        # 指定当前活动相应的行为是 ACTION_START
        
        # 指定当前活动相应的分类是 DEFAULT
        
    
public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 实例化 Intent,并设置行为是 ACTION_START,不设置分类则默认分类是 DEFAULT
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });
    }

增加活动分类:


    
        # 指定当前活动相应的行为是 ACTION_START
        
        # 指定当前活动相应的分类是 DEFAULT
        
        # 指定当前活动相应的分类是 MY_CATEGORY
        
    
public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        
        Button button1 = (Button) findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 实例化 Intent,并设置行为是 ACTION_START
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                // 为 Intent 设置分类是 MY_CATEGORY
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }
        });
    }

2.3.3 更多隐式 Intent 的用法

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 实例化 Intent,并设置行为是 ACTION_VIEW
        Intent intent = new Intent(Intent.ACTION_VIEW);
        // 设置 Intent 的 Uri
        intent.setData(Uri.parse("https://www.baidu.com"));
        // 启动活动,会打开系统浏览器访问设置的网址
        startActivity(intent);
    }
});



    

    
        
        
        # 指定数据的协议部分是 http
        
    

调用系统拨号界面:

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:10086"));
        startActivity(intent);
    }
});

2.3.4 向下一个活动传递数据

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String data = "Hello SecondActivity";
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
        // 暂存数据到 Intent 中
        intent.putExtra("extra_data", data);
        startActivity(intent);
    }
});
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Intent intent = getIntent();
        // 从 Intent 中取出数据
        String data = intent.getStringExtra("extra_data");
        Log.d("SecondActivity", data);
    }

2.3.5 返回数据给上一个活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);
    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);
            // 启动活动,并接受活动销毁时返回的数据,第二个参数为请求码,用于判断数据的来源
            startActivityForResult(intent, 1);
        }
    });
}

// 下一个活动被销毁时的回调函数
@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:
    }
}
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("SecondActivity", "Task id is " + getTaskId());
        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 中
                intent.putExtra("data_return", "Hello FirstActivity");
                // 向上一个活动返回数据,第一个参数一般为 RESULT_OK
                setResult(RESULT_OK, intent);
                // 销毁当前活动
                finish();
            }
        });
    }

    // 绑定按下返回键时的逻辑,与按钮点击的逻辑一致
    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello FirstActivity");
        setResult(RESULT_OK, intent);
        finish();
    }
}

你可能感兴趣的:(android)