Back

android - activity内部的通信机制: handler, 不同activity之间的通信机制:startActivityForResult

发布时间: 2017-08-25 00:16:00

先不要考虑 无顺序关系的Activity 之间的通信. 

Activity的内部:

先声明一个handler: 

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case Constants.SUCCESSFULLY_UNBINDED:
                    Toast.makeText(SettingActivity.this, (String) msg.obj, Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

再在代码任意位置(该Activity内)抛出这个handler:

                                Message msg = Message.obtain();
                                msg.what = Constants.SUCCESSFULLY_UNBINDED;
                                msg.obj = getResources().getString(R.string.successfully_unbinded);
                                handler.sendMessage(msg);

具有先后顺序的Activity之间: 使用startActivityForResult()

先在 第一个Activity中,打开第二个Activity: 

......
public static final int GO_TO_BIND_DEVICE_PAGE = 800;

 // 打开新的Activity
    public void startBindDevice(View view){
        Intent intent = new Intent(this, ScannerActivity.class);
        intent.putExtra("isBindDevise", 1);
        startActivityForResult(intent, GO_TO_BIND_DEVICE_PAGE);

//        startActivity(intent);  不要用.
    }

    // 接受别的Activity返回的数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == GO_TO_BIND_DEVICE_PAGE && resultCode == Constants.RESULT_CODE_BIND_SUCCESS){
            Toast.makeText(this, getResources().getString(R.string.bind_account_successfully), Toast.LENGTH_SHORT).show();
        }
    }
 

然后,在第二个Activity的对应方法中: 

//  某个方法中...
        Intent intent = new Intent();
        this.setResult(Constants.RESULT_CODE_BIND_SUCCESS, intent);
        finish();

Back