Android系列之Activity页面之间的数据传递
来源:互联网 发布:mac格式化u盘 什么格式 编辑:程序博客网 时间:2024/05/14 09:54
一、Activity页面之间的数据传递有4种方式,在这里我就简单的用代码来和大家讲一下怎么去用,以及一些注意事项。
二、哪四种?
1、传递基本数据类型
2、传递Bundle
3、传递对象
4、传递对象集合
三、首先我先把XML布局文件代码放出来,这样的话就方便后面查看代码的时候,免得大家看不懂。
xml布局代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zking.laci.android12.MainActivity" android:orientation="vertical" > <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main" android:hint="请输入用户名" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="写心情" android:onClick="write" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_main" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zking.laci.android12.ThinkActivity" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_think" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请写心情" android:id="@+id/et_think" android:lines="5" android:gravity="top" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" android:onClick="ok" /></LinearLayout>
四、接下来我就把Java代码放出来,里面有四种传递数据的方式
因为这里有种是传递对象,因此,我会先放一个实体类上来,需要注意的是:传递对象和传递对象集合是实现完全不同的类的,而且对象集合在实现过程中,需要重写一些方法。
package com.zking.entity;import android.os.Parcel;import android.os.Parcelable;import java.io.Serializable;/** * Created by Laci on 2017/6/16. *//** * 传递对象实现Serializable类,传递对象集合实现Parcelable类,并重写相对应的方法 */public class Person implements Parcelable{ private int pid; private String pname; private int page; protected Person(Parcel in) { pid = in.readInt(); pname = in.readString(); page = in.readInt(); } public static final Creator<Person> CREATOR = new Creator<Person>() { @Override public Person createFromParcel(Parcel in) { return new Person(in); } @Override public Person[] newArray(int size) { return new Person[size]; } }; public void setPid(int pid) { this.pid = pid; } public void setPname(String pname) { this.pname = pname; } public void setPage(int page) { this.page = page; } public int getPid() { return pid; } public String getPname() { return pname; } public int getPage() { return page; } public Person(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = page; } @Override public String toString() { return "Person{" + "pid=" + pid + ", pname='" + pname + '\'' + ", page=" + page + '}'; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(pid); dest.writeString(pname); dest.writeInt(page); }}
之后就是两个布局文件相对应的Activity的代码了
package com.zking.laci.android12;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;import com.zking.entity.Person;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private TextView tv; private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通过ID来获取下相对应的控件 et = (EditText) findViewById(R.id.et_main); tv = (TextView) findViewById(R.id.tv_main); } public void write(View v){ String uname=et.getText().toString(); Intent i=new Intent(this,ThinkActivity.class); //方法一、传递基本数据类型 //i.putExtra("uname",uname); //方法二、传递Bundle// Bundle b=new Bundle();// b.putString("uname",uname);// i.putExtra("b",b); //方法三、传递对象// Person p=new Person(1,uname,20);// i.putExtra("p",p); //方法四、传递对象集合 ArrayList lt=new ArrayList(); Person p1=new Person(1,uname,20); Person p2=new Person(2,uname,30); Person p3=new Person(3,uname,40); lt.add(p1); lt.add(p2); lt.add(p3); i.putParcelableArrayListExtra("lt",lt); //带有目的的传 startActivityForResult(i,0x201); } //得到从另一个页面返回的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); String content=data.getStringExtra("content"); tv.setText(content); }
package com.zking.laci.android12;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.TextView;import com.zking.entity.Person;import java.util.List;public class ThinkActivity extends AppCompatActivity { private TextView tv; private EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); tv = (TextView) findViewById(R.id.tv_think); et = (EditText) findViewById(R.id.et_think); //获取第一个页面传递过来的数据// String uname=getIntent().getStringExtra("uname"); //接收Bundle// Bundle b=getIntent().getBundleExtra("b");// String uname=b.getString("uname"); //接收对象// Person p= (Person) getIntent().getSerializableExtra("p"); //接收对象集合 List<Person> lt=getIntent().getParcelableArrayListExtra("lt"); for (Person person : lt) { tv.setText(tv.getText()+person.toString()); } } public void ok(View v){ String content=et.getText().toString(); Intent i=new Intent(); i.putExtra("content",content); //设置结果 setResult(0x1,i); //自杀(干掉自己,干掉当前的Activity) finish(); }}
那么到这里,四种传递方式也就到此为止了,有什么问题可以提出来,我们一起讨论讨论!
阅读全文
1 0
- Android系列之Activity页面之间的数据传递
- Android学习系列之(五)Activity之间的数据传递
- Android-Activity页面之间的数据传递
- Android-Activity页面之间的数据传递
- Android之Activity之间的数据传递
- Android-Activity的基本介绍和页面之间数据传递
- Android——Activity页面之间的数据传递
- Activity页面之间的数据传递
- Activity页面之间的数据传递
- Android基础之Activity系列 - Activity间的数据传递
- android开发之 Activity之间数据传递
- Android 开发之Activity之间传递数据
- Android 开发之activity之间传递数据
- android 开发之activity之间传递数据
- android 开发之activity之间传递数据
- android 开发之activity之间传递数据
- Android之activity之间传递数据
- Android之不同Activity之间的数据传递
- JS中的冒泡简洁理解
- hadoop 测试环境搭建
- URAL 1930 Ivan's Car
- BZOJ 1076 [SCOI2008]奖励关 状压+期望DP 题解
- ${pageContext.request.contextPath}
- Android系列之Activity页面之间的数据传递
- ViewPage+Fragment
- 关于接下来的Android学习(一)
- bzoj 1054: [HAOI2008]移动玩具.cpp
- 对比一下PHP和JAVA开发网站的优劣
- 移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)
- csu1006:SAW
- hdu Problem-1678(priority_queue+模拟)
- 【Learning Notes】基于 boosting 原理训练深层残差神经网络