Activity之间数据传输

来源:互联网 发布:淘宝隐藏未完成订单 编辑:程序博客网 时间:2024/06/02 12:02
Intent的基本属性
一个Intent对象包含了一组信息:


Component name 组件名称:
intent会根据component name要启动哪一个组件Activity、Service、ContentProvider
Action: ACTION_CALL、ACTION_EDIT 指定另外一个Activity要做些什么
Data:
从一个Activity向另一个Activity传送怎样的数据


Extras额外的:事先向一个activity的intent中存入的键值对
Flag:
Category:


注意:Activity之间通过intent传递数据不一定要求是在同一个应用中
Action属性:是指Intent要完成的动作,是一个字符串常量。在Intent类里面定义了大量的Action常量属性。如:ACTION_CALL打电话、ACTION_EDIT编辑数据、ACTION_BATTERY_LOW电量低广播等




Category属性:是一个执行Action的附加信息
CATEGORY_LAUNCHER意味着在加载程序时,
Activity出现在最上面。CATEGORY_HOME则表示回到Home界面




Extras属性是添加一些组件的附加信息
intent.putExtra(key,value)
getIntent()、intent.getStringExtra(key)


Intent寻找组件的方法
Intent在寻找目标组件时有两种方法:
通过组件名称直接指定:


通过Intent Filter过滤指定
当Intent要求做某些事情时,IntentFilter被用来描述这个activity能够做些什么事情
Intent最常使用的方法是用来启动一个Activity
// 生成一个Intent对象
Intent intent = new Intent();


// 在Intent对象当中添加一个键值对,实现两个Activity之间数据的传送。


intent.putExtra("testIntent", "123");
// 
设置Intent对象要启动的Activity
intent.setClass(MainActivity.this, OtherActivity.class);


// 通过Intent对象启动另外一个Activity,这两个Activity不一定要同一个应用程序
MainActivity.this.startActivity(intent);




Bundle对象






发送数据的Activity
接收数据的Activity
Bundle针对不同的数据类型提供了
存入数据putXxx方法(key,value)
若要取出数据,则使用getXxx方法(key)
除了简单传递类型之外,也可以封装String[]与ArrayList<String>的方式


// 实例化一个Intent对象,并指定class
Intent intent = new Intent();


intent.setClass(DateTransferActivity.this, ShowInfoActivity.class);


// 实例化Bundle,并将要传递的数据传入


Bundle bundle = new Bundle();


bundle.putDouble("height", height);


bundle.putString("sex", sex);
// 将Bundle对象分配给Intent对象
intent.putExtras(bundle);
// 调用另一个Activity
startActivity(intent);
//取得Intent对象中的Bundle对象
Bundle bundle = this.getIntent().getExtras();
//取得Bundle中的数据
String sex = bundle.getString("sex");
double height = bundle.getDouble("height");












activity 返回值






public class MainActivity extends ActionBarActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //处理按钮事件
        this.findViewById(R.id.btn).setOnClickListener(listener);
    }


    private View.OnClickListener listener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //意图对象
            Intent intent=new Intent();
            //上下文对象,加载窗体类字解码
            intent.setClass(MainActivity.this, Main2Activity.class);
            //传String
            intent.putExtra("name", "zs");
         startActivityForResult(intent,1);
            //传对象
//           Bundle bundle=new Bundle();
//            bundle.putBundle("a",);
        };
    };




    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //获取当前返回值
        if(resultCode==1){
           Bundle i= data.getExtras();
          Toast.makeText(this, i.getString("name"),Toast.LENGTH_LONG).show();
        }
    }
}






public class Main2Activity extends ActionBarActivity {
    private Button btn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Toast.makeText(this, "我来了", Toast.LENGTH_SHORT).show();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        TextView tv=(TextView) this.findViewById(R.id.textView);
        tv.setText(this.getIntent().getStringExtra("name"));


       btn=(Button) this.findViewById(R.id.button);




        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent backIntent=new Intent();
                backIntent.putExtra("name","ls");
                //当前窗体关闭返回值
               setResult(1,backIntent);
                //结束当前窗体
                finish();


            }
        });
    }
}













0 0
原创粉丝点击