日报2015/10/11(极客学院安卓视频学习)

在 Activity 跳转过程中的生命周期

总结了一下:

从A跳到B,A onPause()后不会马上执行onStop(),而是要等到
B onCreate(),onStart(),onResume() 之后再执行onStop()
若是B没有完全遮挡住A,例如B是一个dialog的话,onStop() 便不会执行了。

在 Activity 之间传递参数

从MainActivity通过Intent跳转到B,需要
new Intent(MainActivity.this,B.class)
而B中可以通过getIntent() 来取得它们之间这个桥梁Intent,并且取到保存的键值对参数。

Bundle对象获取字符串的时候有一个重载的方法:

getString("键名","若不存在时的默认值")

这样若是Bundle中没有这个key的value,则取出的是默认值。

与Intent对应的取值:
putExtra("key",Bundle)getBundleExtra("key")
putExtras(Bundle)getExtras()

传递值对象

如果不对对象进行任何处理,那么

intent.putExtra("user",new User("jackie",21));

所以,应该对实体对象进行处理:两种方式

1implements Serializable

A:intent.putExtra("user",new User("jackie",21));
B:intent.getSerializableExtra("user");//此处注意是Serializable

2implements Parcelable

User类要重写两个方法,其中

@Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

parcelable没有自动序列化的机制需要我们手动实现,如上

另外,还要在User里写一个

public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

A:intent.putExtra("user",new User("jackie",21));
B:intent.getParcelableExtra("user");//此处注意是Parcelable

后者是安卓为开发者提供的序列化方法,不使用系统序列化机制,速度较快,虽然操作复杂了些。

获取 Activity 的返回参数

在B的按钮处:使用setResult() 方法,并且新声明一个intent

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("BName",editText.getText().toString());
                setResult(1,intent);
            }
        });

而在A中,要想接收到返回值就不能通过startActivity(intent);
要使用startActivityForResult(intent,0);//0表示一种两者交互的行为
并且A中要重写一个方法来对返回数据进行处理

onActivityResult(int requestCode, int resultCode, Intent data)

这里的data就是B中返回的那个intent,那么通过它就能取到B中EditText的值

String name=data.getStringExtra("BName");
textView.setText(name);

也就是说关键在于(限于幅面参数省略)
A:startActivityForResult(),onActivityResult()
B:setResult();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值