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"

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