Android 2个activity相互交互

在编程中,很多时候,不仅需要程序内部需要共享/传递数据(如同一个thread,或是不同的thread),不同程序之间(process)也经常需要共享数据。

在Linux系统中,我们经常用到的Linux命令,如"ls -al",其中"-al"是传给application “ls”的输入值,下面的数据是"ls"的输出值。Linux下的不同程序间传递数据十分直接明了,而Android则不同。

$ ls -al
total 180972
drwxr-xr-x 1 K0402004 1049089         0 八月   16 14:58 ./
drwxr-xr-x 1 K0402004 1049089         0 八月    6 11:38 ../
-rw-r--r-- 1 K0402004 1049089  68425872 八月    3 16:46 gradle-2.10-all.zip
-rw-r--r-- 1 K0402004 1049089 116851656 八月    1 16:37 gradle-4.10.1-all.zip

对于Android而言,则采取不同的方式,采用"intent"进行交互。整理如下,

1. A程序呼叫B程序,并且传递数据给B数据

首先新建一个intent,然后把“Component”赋值给intent;如果要传递值,则放在“putExra”中;最后呼叫“startActivityForResult”

packageName = "com.xxx.sensor";
activityName = "com.xxx.sensor.IRSensorTest";
mTestItemComponentName = new ComponentName(packageName,activityName);

Intent intent = new Intent();
intent.setComponent(mTestItemComponentName);
intent.putExtra("TESTSTYLE", "Test");
intent.putExtra("LANGUAGE", "English");
startActivityForResult(intent, REQUEST_CODE);

2. Activity B则可以在onCreate()方法中获得Activity A传入的数据,

Intent intent = getIntent();
String testStyle = intent.getStringExtra("TESTSTYLE");
String language = intent.getStringExtra("LANGUAGE");

3. Activity B结束时,可以向Activity A传入返回值,比如测试结果,

(Activity A在启动Activity B的时候需要呼叫“startActivityForResult()”,而不能只呼叫“startActivity()”)

    public void returnWithResult(Activity curActivity, boolean isPass) {
        Intent intent = new Intent();
        intent.putExtra("result", isPass);
        curActivity.setResult(-1, intent);
        curActivity.finish();
    }

4. Activity A获取从Activity B传来的数据, 需要在方法“onActivityResult()”中获取,

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null) {
            mReturnResult = data.getBooleanExtra("result", false);
        }
        。。。。

实际开发中,不同Activity之间的数据传递还是十分经常出现的,谨此记之。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章