安卓學習(二)傳遞值

安卓學習傳遞值

準備:

1.新建兩個android Activity,我的是Transmit0808Activity1和Transmit0808Activity2(這個只是個人命名習慣,功能+日期+相關的Activity);
2.A.xml放置一個button按鈕用來測試,B.xml放置一個TextView用來接收從A頁面傳遞過來的數據。

一:傳遞簡單數據


Transmit0808Activity1.java

private Button button;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity1);

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);
                //方式一:傳遞簡單數據:
                i.putExtra("data", "我傳過來啦");   //data是傳的數據的名字,後面的是內容

                startActivity(i);
            }
        });
    }

Transmit0808Activity2.java

    private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();  //來獲取接收前面傳來的數據

        tv = (TextView) findViewById(R.id.tev);

        tv.setText(i.getStringExtra("data"));  //讓這個控件來顯示數據
    }

二:傳遞數據包Bundle


Transmit0808Activity1.java

private Button button;

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

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);

                //方式二:傳遞數據包Bundle
                Bundle b = new Bundle();
                b.putString("name", "張三");
                b.putInt("age", 20);
                i.putExtras(b);

                startActivity(i);
            }
        });
    }

Transmit0808Activity2.java

    private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();  //來獲取接收前面傳來的數據
        Bundle data = i.getExtras();

        tv = (TextView) findViewById(R.id.tev);

        tv.setText(String.format("name=%s, age=%d",data.getString("name"),data.getInt("age")));
    }

三:傳遞值對象


首先創建一個User對象,裏面可以定義一些成員變量,這裏面又牽涉到一個序列化的問題,一種是使用Java裏面的Serializable進行序列化,一種是使用專門爲移動設備設置Parcelable進行序列化,可以嘗試體會下差別

第一種:使用Serializable

User.java

   public class User implements Serializable {
   //使用Serializable進行序列化

    private String name;
    private int age;

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

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

Transmit0808Activity1.java

    private Button button;

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

        button = (Button) findViewById(R.id.stbtn);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {

                Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);

                //方式三:傳遞值對象
                i.putExtra("user",new User("張三",20));
                startActivity(i);
            }
        });
    }

Transmit0808Activity2.java

   private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();
        tv = (TextView) findViewById(R.id.tev);

        User user = (User) i.getSerializableExtra("user");

        tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }

第二種使用Parcelable

User.java

   public class User implements Parcelable {

    private String name;
    private int age;

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

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

    //實現裏邊的兩個方法,把裏邊的數據保存起來方便傳遞
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        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[] newArray(int size) {

            return new User[size];
        }

        //通過一個Parcel來創建一個對象
        public User createFromParcel(Parcel source) {

            return new User(source.readString(),source.readInt());
        }
    };
}
Transmit0808Activity1.java同上不需要修改

Transmit0808Activity2.java

   private TextView tv;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transmit0808_activity2);

        Intent i = getIntent();
        tv = (TextView) findViewById(R.id.tev);

        User user = i.getParcelableExtra("user");

        tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
發佈了32 篇原創文章 · 獲贊 52 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章