Android第五天Activity之间的数据传递

从当前页面传递数据到第二个页面:

页面1:

public class MainActivity extends AppCompatActivity {

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

    }

    public void onClick(View view) {
        //当点了按钮的时候执行这个方法
        /**
         * 跳转页面
         * 参数一  : 上下文对象   表示的是 当前的上下文环境
         * 参数二  : 目标Activity的类对象
         */
        Intent intent = new Intent(this, SecondActivity.class);
        /**
         *  Intent 可以传递的数据类型
         *  8中基本数据类型  以及他们的数组
         *  String String数组
         *  序列化对象
         *  String类型的 ArrayList
         *
         *  Bundle 一个数据的封装对象
         *
         */
        // 将要传递的数据添加到Intent 中

        intent.putExtra("name","王世兴");
        intent.putExtra("isSingle",false);
        intent.putExtra("age",21);
        intent.putExtra("sex","男");

        //传递自定义对象的时候需要  序列化 实现 implements Serializable
        Person zhanglei =  new Person("张磊",20,"女");
        intent.putExtra("person",zhanglei);

        // 传递一个String 类型的 List
        ArrayList<String>  list = new ArrayList<>();
        list.add("呵呵");
        list.add("呵呵");
        list.add("呵呵");
        list.add("呵呵");
        intent.putExtra("list",list);

        //传递一个Bundle 对象  这个对象允许被 Intent 传递
        Bundle bundle = new Bundle();
        bundle.putBoolean("isbundle",true);
        intent.putExtra("bundle",bundle);


        //启动跳转
        startActivity(intent);
    }
}

页面2:

public class SecondActivity extends AppCompatActivity {

    private TextView showTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        // 获取传递数据过来的 Intent
        Intent intent = getIntent();


        //获取 载体中的 对象数据 参数是 存入数据时候的 key
        String name = intent.getStringExtra("name");
        String sex = intent.getStringExtra("sex");
        boolean isSingle = intent.getBooleanExtra("isSingle", false);
        int age = intent.getIntExtra("age", 0);

        //获取序列化的自定义对象需要强制类型转换成为 相应的类型
        Person person = (Person) intent.getSerializableExtra("person");

        //获取 String类型的 List
        ArrayList<String> list = intent.getStringArrayListExtra("list");
        
        //获取Bundle 对象
        Bundle bundle = intent.getBundleExtra("bundle");
        boolean isBundle = bundle.getBoolean("isBundle");

        showTv = (TextView) findViewById(R.id.show_tv);
        showTv.setText(name + "\n" + sex + "\n" + age + "\n" + isSingle + "\n" + person.toString() + "\n" + list.toString()+"\n"+isBundle);
    }
}

回传值:

页面1:

public class MainActivity extends AppCompatActivity {

    private TextView showTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showTv = (TextView) findViewById(R.id.show_tv);
    }

    public void onClick(View view) {
        //点击跳转到 第二个页面
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("info", "把数据给我");
        //为了一个结果而跳转页面
        startActivityForResult(intent, 1000);
    }

    /**
     * 接收回传值的方法
     */

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1000 && resultCode == 1001) {
            // 当满足了 请求和结果码的 判断的时候 获取Intent中的数据
            String info = data.getStringExtra("info");
            String dream = data.getStringExtra("dream");
            boolean isSingle = data.getBooleanExtra("isSingle", false);

            showTv.setText(info+"\n"+dream+"\n"+isSingle);
        }
    }
}

页面2:

public class SecondActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        //获取传递过来的数据
        String info = intent.getStringExtra("info");
        //将传递过来的数据 Toast 吐司展示出来
        Toast.makeText(this, info, Toast.LENGTH_SHORT).show();
    }

    public void onClick(View view) {
        // 点击销毁当前页面
        Intent intent = new Intent();
        intent.putExtra("info", "你想要啥我都给你");
        intent.putExtra("isSingle", true);
        intent.putExtra("dream", "我想要个iPad");
        //设置传递到 回去的   Activity的结果
        setResult(1001, intent);
        // 结束  销毁当前的Activity
        finish();

    }

    /**
     * 了解
     * 如何知道自己按了返回键
     * 该方法 可以监听 手机上的 所有按键
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

//        KEYCODE_BACK表示 返回键
        if (keyCode == KeyEvent.KEYCODE_BACK){
            Intent intent = new Intent();
            intent.putExtra("info", "你想要啥我都给你");
            intent.putExtra("isSingle", true);
            intent.putExtra("dream", "我想要个iPad");
            //设置传递到 回去的   Activity的结果
            setResult(1001, intent);

            //这个方法 应该不用加
            finish();
            //一定要 返回true  表示 直接在这个地方  消费掉这个按钮事件
            return true;
        }
        
        return super.onKeyDown(keyCode, event);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值