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

來源:互聯網
上載者:User

標籤:android

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

demo源碼例子:點擊此處下載

有兩種物件類型可以傳遞,一是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<User> CREATOR = new Creator<User>() {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<User> mArrayListUsers = new ArrayList<User>();private ArrayList<Student> mArrayListStudent = new ArrayList<Student>();@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返回的資料: " + "\n");for (int i = 0; i < mArrayListUsers.size(); i++) {User userArrayList = new User();userArrayList = mArrayListUsers.get(i);show.append("name is: " + userArrayList.getName() + "\n"+ "age is: " + userArrayList.getEage() + "\n");}} else if (resultCode == RESULT_OK && requestCode == 200) {Bundle bundle = this.getIntent().getExtras();if (bundle != null) {mArrayListStudent = (ArrayList<Student>) bundle.getSerializable("student_Arry");}show.setText("");show.append("IntentSerializableActivity返回的資料: " + "\n");for (int i = 0; i < mArrayListStudent.size(); i++) {Student studentArrayList = new Student();studentArrayList = mArrayListStudent.get(i);show.append("name is: " + studentArrayList.getName() + "\n"+ "age is: " + studentArrayList.getEage() + "\n");}}}}

接受資料新的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<User> mArrayListUsers = new ArrayList<User>();@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() + "\n"+ "You age is: " + user.getEage() + "\n" + "\n");for (int i = 0; i < mArrayListUsers.size(); i++) {User userArrayList = new User();userArrayList = mArrayListUsers.get(i);mTextView.append("You name is: " + userArrayList.getName() + "\n"+ "You age is: " + userArrayList.getEage() + "\n");}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<Student> mArrayListStudent=new ArrayList<Student>();@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<Student>) bundle.getSerializable("student_Arry");}mTextView.append("You name is: " + student.getName() + "\n"+ "You age is: " + student.getEage() + "\n" + "\n");for (int i = 0; i < mArrayListStudent.size(); i++) {Student studentArrayList = new Student();studentArrayList = mArrayListStudent.get(i);mTextView.append("You name is: " + studentArrayList.getName() + "\n"+ "You age is: " + studentArrayList.getEage() + "\n");}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布局我就不貼了,需要源碼可以下載。

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

:點擊此處下載


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

聯繫我們

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