Android使用Intent完成活动之间的通信

假设我们由一个活动FirstActivity,作为主活动,并且这个活动加载了一个布局,该布局上有一个按键名称为Button1,id为button_1
这里写图片描述
现在,转到这个活动的源码文件上:

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 view) {
                // 创建一个发送实例,两个参数分别代表发出者和接收者
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);  
                String data="Hello second activity";
                intent.putExtra("extra_data",data);  // 发送消息操作
          //      startActivity(intent); 如果只发送消息,可以使用这个,但是它和下面一句不能同时出现,否则会在SecondActivity销毁后,由创建一次。。。。
                startActivityForResult(intent,1);  // 发送消息,激活了SecondActivity,注意这里同时设置了返回时的requestcode
            }
        });


    }
}

   /**
     * Dispatch incoming result to the correct fragment.
     * 接收消息用
     * @param requestCode :启动活动时,传入的请求码,就是上面个startActivityForResult的参数1
     * @param resultCode 返回参数时的处理结果,对应RESULT_OK
     * @param data 返回的参数
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){  // 先对应请求码
            case 1:
                if (resultCode==RESULT_OK){  // 根据结果值来确定是否输出
                    String returnData= data.getStringExtra("return_data");
                    Toast.makeText(FirstActivity.this,returnData,Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

假设由建立了一个活动SecondActivity,用于接收主活动FirstActivity发送的消息,同时返回给FirstActivity的消息。
这里写图片描述

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);

        Intent intent=getIntent();  // 获取上一个活动传入的实例
        String data=intent.getStringExtra("extra_data");  // 获取数据
        Toast.makeText(SecondActivity.this,data,Toast.LENGTH_SHORT).show();
        // 新建按键并设置监听
        Button button2=(Button)findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent();  // 在这里又新建了一个实例,用于返回数据
                intent.putExtra("return_data","hello first activity"); // 设置返回的数据标识与返回数据
                setResult(RESULT_OK,intent);  // 设置返回码与实例
                finish();  // 直接终止这个活动
            }
        });
    }

    /**
     * Take care of popping the fragment back stack or finishing the activity
     * as appropriate.
     */
    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent=new Intent();
        intent.putExtra("return_data","hello first activity");
        setResult(RESULT_OK,intent);
        finish();
    }
}

最后以图片的形式说明消息传递的机制:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/80042322