AndroidStudio学习笔记一:了解Activity

注意:特别提醒,官方帮助文档打开太慢,建议使用:http://www.android-doc.com/

一、Activity 的生命周期


二、Activity之间数据的传递

1、传递简单数据

A页面:

findViewById(R.id.newActivity).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent activity = new Intent(MainActivity.this, Main2Activity.class);
        activity.putExtra("data", "Hello word");
        startActivity(activity);
    }
});

B页面:

private TextView textWord;
//接受传值Intent newActivity = getIntent();textWord = (TextView) findViewById(R.id.textView2);textWord.setText(newActivity.getStringExtra("data"));

2、数据传递 包Bundle

A页面:

Bundle b = new Bundle();
                b.putString("name", "meimei");
                b.putInt("age", 23);
//                activity.putExtras(b);
                activity.putExtra("data", b);

B页面:

Intent newActivity = getIntent();

//        Bundle data = newActivity.getExtras();
        Bundle data = newActivity.getBundleExtra("data");
        textWord = (TextView) findViewById(R.id.textView2);
        textWord.setText(data.getString("name"));

3、传递值对象

A、使用implements Serializable 传值(Java 语言自带的序列化) 操作简单,速度较慢

activity.putExtra("user", new User("xiaomi", 23));
User user = (User) newActivity.getSerializableExtra("user");
textWord.setText(user.getName());

B、使用Parcelable传值(操作复杂,Studio支持比较好,速度比较快)

model:

public class User implements Parcelable {

    private String name;
    private  int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public  User(String name, int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        //没有自带序列化方式,需要手动实现
        dest.writeString(getName());
        dest.writeInt(getAge());
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return new User(source.readString(), source.readInt());
        }

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

}
//接受值
User user = (User) newActivity.getParcelableExtra("user");
textWord.setText(user.getName());

4、获取Activity的返回参数

A、页面:

startActivityForResult(activity, 0);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    backText = (TextView) findViewById(R.id.textView123);
    backText.setText(data.getStringExtra("data"));
}

B、页面

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i = new Intent();
        editText = (EditText) findViewById(R.id.editText2);
        i.putExtra("data", editText.getText().toString());
        setResult(1, i);
        finish();
    }
});
注意事项:在A页面实现onActivityResult 方法

三、Activity的启动模式

android:launchMode="singleTop"

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