Android利用Parcelable在Activity之間傳遞自訂對象

來源:互聯網
上載者:User

MainActivity如下: [java] package cc.testparcelable;    import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.app.Activity;  import android.content.Intent;  /**  * Demo描述:  * 利用Parcelable在Activity之間傳遞自訂對象  */  public class MainActivity extends Activity {      private Button mButton;      private final String key="testparcelable";      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          init();      }            private void init(){          mButton=(Button) findViewById(R.id.button);          mButton.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View view) {                  Worker worker=new Worker(9527, "zxx");                  Bundle bundle=new Bundle();                  bundle.putParcelable(key, worker);                  Intent intent=new Intent(MainActivity.this, AnotherActivity.class);                  intent.putExtras(bundle);                  startActivity(intent);              }          });                }  }     AnotherActivity如下: [java] package cc.testparcelable;    import android.app.Activity;  import android.os.Bundle;  import android.widget.TextView;  import android.os.Parcelable;    public class AnotherActivity extends Activity {      private TextView mTextView;       private final String key="testparcelable";      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.another);          init();      }        private void init() {          mTextView=(TextView) findViewById(R.id.textView);          Parcelable parcelable=this.getIntent().getParcelableExtra(key);          Worker worker=(Worker) parcelable;          mTextView.setText("Parcelable傳遞過來的資料為:\n"+"id="+worker.getId()+"    name="+worker.getName());      }    }     Worker如下: [java] package cc.testparcelable;    import android.os.Parcel;  import android.os.Parcelable;  /**  * 要傳遞自訂類型,應讓自訂類型支援parcelable協議,  *   * 實現步驟如下:  * 1>自訂類型必須實現Parcelable介面,並且實現Parcelable介面的public void writeToParcel(Parcel dest, int flags)方法 .  * 2>自訂類型中必須含有一個名稱為CREATOR的靜態成員,該成員對象要求實現Parcelable.Creator介面及其方法.  *   * Parcelable介面的作用:  * 實現了Parcelable介面的執行個體可以將自身的狀態資訊(狀態資訊通常指的是各成員變數的值)寫入Parcel  * 也可以從Parcel中恢複其狀態. 所以使用Parcel用來完成資料的序列化傳遞.  */    public class Worker implements Parcelable {      private Integer id;      private String name;              public Worker() {          super();      }              public Worker(Integer id, String name) {          super();          this.id = id;          this.name = name;      }          public Integer getId() {          return id;      }          public void setId(Integer id) {          this.id = id;      }          public String getName() {          return name;      }          public void setName(String name) {          this.name = name;      }          @Override      public String toString() {          return "Worker [id=" + id + ", name=" + name + "]";      }             /////////////////////////////////////////////////////////////            //對象在Parcelable中的編碼形式       @Override      public int describeContents() {          return 0;      }        //把javaBean中的資料寫到Parcel        @Override      public void writeToParcel(Parcel parcel, int flags) {            parcel.writeInt(this.id);            parcel.writeString(this.name);      }            //添加一個靜態成員,名為CREATOR,該對象實現了Parcelable.Creator介面      public static final Parcelable.Creator<Worker> CREATOR = new Parcelable.Creator<Worker>(){                    //從Parcel中讀取資料,返回worker對象          @Override          public Worker createFromParcel(Parcel source) {              return new Worker(source.readInt(), source.readString());          }          @Override          public Worker[] newArray(int size) {              return new Worker[size];          }      };    }   main.xml如下: [html] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"     >        <Button          android:id="@+id/button"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Test Parcelable"           android:layout_centerInParent="true"      />    </RelativeLayout>   another.xml如下: [html]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="match_parent"     >        <TextView          android:id="@+id/textView"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_centerInParent="true"      />    </RelativeLayout>    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.