天天看点

Activity数据传递(Intent、Bundle)Activity之间数据传递

转载请注明出处:http://blog.csdn.net/huiblog/article/details/53222810

在上一篇文章《Activity(Intent-filter详解及跳转)》中,我们讲解了使用Intent进行Activity的简单跳转。这一节我们把Activity跳转时传递数据讲一下。

Activity之间数据传递

Activity跳转之间使用Intent传递数据。

Intent

Intent->

public class Intent implements Parcelable, Cloneable

是一个实现了序列化的类。使用起来比较简单。先来例子:

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void testIntent(View view){
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("main","你最牛!");//直接将main->"你最牛!"键值对形式存入Intent中

        Bundle bundle = new Bundle();//创建bundle对象
        bundle.putFloat("lala",f);//将lala->2.234f对应的值存入bundle中
        bundle.putBoolean("haha", true);
        intent.putExtras(bundle);//将bundle存入Intent中
        startActivity(intent);
    }
}
           

SecondActivity.java

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Intent intent = getIntent();//获取到intent对象
       if(intent != null){
            String main = intent.getStringExtra("main");//获取存入intent中的main对应的值
            Log.e("hui", "SecondActivity收到的数据是:"+main);
        }

        Bundle bundle = intent.getExtras();//拿到intent中存入的bundle
        if(bundle != null){
            float lala = bundle.getFloat("lala", f);//拿到bundle中存入的lala对应的值,默认值设为6.6( 如果bund中没有lala对应的值,则返回6.6)
            boolean haha = bundle.getBoolean("haha", false);
            Log.e("hui", "Bundle收到的lala=:"+lala);
            Log.e("hui", "Bundle收到的haha=:"+haha);
        }
    }
}
           

结果:

/com.example.asia.testintent E/hui: SecondActivity收到的数据是:你最牛!
/com.example.asia.testintent E/hui: Bundle收到的lala=:
/com.example.asia.testintent E/hui: Bundle收到的haha=:true
           

分析:

在MainActivity中使用intent.putExtra(“main”,”你最牛!”);了存数据,putExtra是一种键值对存取数据的方法。在这里main对应的数据就是”你最牛!”,将这个值封装到Intent中,然后跳转到SecondActivity后,先使用getIntent拿到存取数据的intent,然后再使用intent.getStringExtra(key)将Intent中封装的key对应的值取出来。

Activity数据传递(Intent、Bundle)Activity之间数据传递

可以看到putExtra有很多重载方法,可以封装八大基本数据类型和字符串以及他们的数组,还有实现了序列化接口的对象,还有Bundle对象。

Bundle

  • 发送数据
    • 创建bundle对象
    • 将数据使用bundle.putFloat(key,value)或bundle.putBoolean(key, value)等等方式将数据存入bundle中

      *创建Intent对象, 将bundle对象存入inent对象中

  • 拿到数据
    • 在目的Activity中getIntent得到intent对象
    • 使用 intent.getExtras()拿到bundle对象
    • 使用bundle.getFloat(key)之类的拿到key对应的数据

现在我们已经知道了从A跳转到B时,把A中的数据携带到B中该怎么做了。在开发中我们经常会遇到关闭当前Activity把数据返回到上一级Activity的情况。对于这种情况怎么弄呢?Google很屌,当然有办法的。

setResult/onActivityResult

上代码。

在MainActivity中添加代码

private int requestCode = ;
    public void setResult_onActivityResult(View view){
        Intent intent = new Intent(this, SecondActivity.class);
        startActivityForResult(intent, requestCode);
    }

    /**
     * 以startActivity(intent)启动的Activity销毁的Activity返回的数据返回到这里
     * @param requestCode startActivityForResult(intent, requestCode)中的requestCode
     * @param resultCode setResult(int resultCode, Intent data)中的resultCode
     * @param data 返回的数据封装在这里
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data != null){
            String fanhui = data.getStringExtra("fanhui");
            Log.e("hui", "返回的数据是:"+fanhui);
        } 
        Log.e("hui", "requestCode=:"+requestCode);
        Log.e("hui", "resultCode:"+resultCode);
    }
           

在SecondActivity的onCreate中添加如下代码

Intent intent2 = new Intent();
        intent2.putExtra("fanhui", "返回的数据是我最帅");
        /**
         * void setResult(int resultCode, Intent data)
         * resultCode:返回的结果码,对应void onActivityResult(int requestCode, int resultCode, Intent data)中的resultCode
         * data:将返回的数据封装到data中
         */
        setResult(, intent2);
           

结果:

Activity数据传递(Intent、Bundle)Activity之间数据传递

OK!Activity之间传递数据就讲到这了。↖(^ω^)↗

code在这

继续阅读