Android intent 傳遞對象以及返回重新整理

來源:互聯網
上載者:User

Android intent 傳遞對象以及返回重新整理

之前項目需要,找過這方面知識。所以今天也總結一下。大家都知道activity跳轉用intent,Android的當前頁面跳轉到新的頁面。當然跳轉的同時常常要攜帶資料或者對象。那我下面就說說跳轉帶對象吧。還有在例子當中,新的activity返回時,也有對象一起返回。下面看代碼,只要入門Android了都看得懂,我就不再寫很多注釋了。

 

有兩種物件類型可以傳遞,一是Parcelable,推薦用這個。二是Serializable。當然你在class建立對象時,都要對這兩個進行介面。看代碼。

 

package com.example.intentdemo;import android.os.Parcel;import android.os.Parcelable;public class User implements Parcelable{private String name;private String sex;private int eage;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getEage() {return eage;}public void setEage(int eage) {this.eage = eage;}public static final Parcelable.Creator CREATOR = new Creator() {public User createFromParcel(Parcel source) {User user = new User();user.name = source.readString();user.sex = source.readString();user.eage = source.readInt();return user;}public User[] newArray(int size) {return new User[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel parcel, int arg1) {     parcel.writeString(name);       parcel.writeString(sex);       parcel.writeInt(eage);  }}

package com.example.intentdemo;import java.io.Serializable;public class Student implements Serializable {private String name;private String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getEage() {return eage;}public void setEage(int eage) {this.eage = eage;}private int eage;}

MainActivity.class

 

 

package com.example.intentdemo;import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private ArrayList mArrayListUsers = new ArrayList();private ArrayList mArrayListStudent = new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);InitUI();}private void InitUI() {Button Parcelable = (Button) findViewById(R.id.button1);Button Serializable = (Button) findViewById(R.id.button2);if (Parcelable != null) {Parcelable.setOnClickListener(this);}if (Serializable != null) {Serializable.setOnClickListener(this);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View arg0) {if (arg0.getId() == R.id.button1) {setParcelable();} else if (arg0.getId() == R.id.button2) {setSerializable();}}private void setSerializable() {Student student = new Student();student.setName(Serializable);student.setSex(nv);student.setEage(25);mArrayListStudent.add(student);mArrayListStudent.add(student);Intent mIntent = new Intent(this, IntentSerializableActivity.class);Bundle mBundle = new Bundle();mBundle.putSerializable(student_key, student); // 傳遞一個user對象mBundle.putSerializable(student_Arry, mArrayListStudent); // 傳遞一個user對象列表mIntent.putExtras(mBundle);startActivityForResult(mIntent, 200); // 帶返回結果的Intent,標誌碼是1}private void setParcelable() {User user = new User();user.setName(Parcelable);user.setSex(nan);user.setEage(25);mArrayListUsers.add(user);mArrayListUsers.add(user);Intent mIntent = new Intent(this, IntentParcelableActivity.class);Bundle mBundle = new Bundle();mBundle.putParcelable(User_key, user); // 傳遞一個user對象mBundle.putParcelableArrayList(User_Arry, mArrayListUsers); // 傳遞一個user對象列表mIntent.putExtras(mBundle);startActivityForResult(mIntent, 100); // 帶返回結果的Intent,標誌碼是1}// 返回activity頁面重新整理protected void onActivityResult(int requestCode, int resultCode, Intent data) {TextView show = (TextView) findViewById(R.id.test);if (resultCode == RESULT_OK && requestCode == 100) {Bundle bundle = this.getIntent().getExtras();if (bundle != null) {mArrayListUsers = bundle.getParcelableArrayList(User_Arry);}show.setText();show.append(IntentParcelableActivity返回的資料:  + );for (int i = 0; i < mArrayListUsers.size(); i++) {User userArrayList = new User();userArrayList = mArrayListUsers.get(i);show.append(name is:  + userArrayList.getName() + + age is:  + userArrayList.getEage() + );}} else if (resultCode == RESULT_OK && requestCode == 200) {Bundle bundle = this.getIntent().getExtras();if (bundle != null) {mArrayListStudent = (ArrayList) bundle.getSerializable(student_Arry);}show.setText();show.append(IntentSerializableActivity返回的資料:  + );for (int i = 0; i < mArrayListStudent.size(); i++) {Student studentArrayList = new Student();studentArrayList = mArrayListStudent.get(i);show.append(name is:  + studentArrayList.getName() + + age is:  + studentArrayList.getEage() + );}}}}

接受資料新的activity

 

IntentParcelableActivity.class

 

package com.example.intentdemo;import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.KeyEvent;import android.view.Menu;import android.widget.TextView;public class IntentParcelableActivity extends Activity {private ArrayList mArrayListUsers = new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TextView mTextView = new TextView(this);User user = new User();Bundle bundle = this.getIntent().getExtras();if (bundle != null) {user = bundle.getParcelable(User_key);mArrayListUsers = bundle.getParcelableArrayList(User_Arry);}mTextView.append(You name is:  + user.getName() + + You age is:  + user.getEage() +  + );for (int i = 0; i < mArrayListUsers.size(); i++) {User userArrayList = new User();userArrayList = mArrayListUsers.get(i);mTextView.append(You name is:  + userArrayList.getName() + + You age is:  + userArrayList.getEage() + );}setContentView(mTextView);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}// 返回按鍵調用public boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (keyCode == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent();Bundle mBundle = new Bundle();  mBundle.putParcelableArrayList(User_Arry, mArrayListUsers);   //傳遞一個user對象列表    intent.putExtras(mBundle);      setResult(RESULT_OK, intent);finish();}return true;}}

IntentSerializableActivity.class

 

 

package com.example.intentdemo;import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.KeyEvent;import android.view.Menu;import android.widget.TextView;public class IntentSerializableActivity extends Activity {private ArrayList mArrayListStudent=new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView mTextView = new TextView(this);Student student = new Student();Bundle bundle = this.getIntent().getExtras();if (bundle != null) {student = (Student) bundle.getSerializable(student_key);mArrayListStudent = (ArrayList) bundle.getSerializable(student_Arry);}mTextView.append(You name is:  + student.getName() + + You age is:  + student.getEage() +  + );for (int i = 0; i < mArrayListStudent.size(); i++) {Student studentArrayList = new Student();studentArrayList = mArrayListStudent.get(i);mTextView.append(You name is:  + studentArrayList.getName() + + You age is:  + studentArrayList.getEage() + );}setContentView(mTextView);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}// 返回按鍵調用public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {Intent intent = new Intent();Bundle mBundle = new Bundle();      mBundle.putSerializable(student_Arry, mArrayListStudent);   //傳遞一個user對象列表    intent.putExtras(mBundle);      setResult(RESULT_OK, intent);finish();}return true;}}

xml布局我就不貼了,需要源碼可以下載。

 

其實看一下代碼,都是能看明白。也很容易實踐,用過一遍之後就好很多了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.