12.在Activity页面之间传递数据
来源:互联网 发布:清洗过期淘宝二次审核 编辑:程序博客网 时间:2024/06/03 12:49
一.跳转数据(页面之间传值-startActivity+startActivityForResult)
<1>传递基本数据类型
基本数据类型:
整:byte short int long
浮点:float double
布尔:boolean
字符:char
引用: String
效果图如下:
具体代码实现:
layout
activity_main.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.android12_activity.MainActivity" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名:" android:id="@+id/et_main_uname" /><!--输入框--> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="写心情" android:onClick="writeThink" /><!-- 一点这个按钮就跳到写心情那个页面--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_main_showThink" /><!--展示写的心情的内容--></LinearLayout>
activity_think.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.android12_activity.ThinkActivity" android:orientation="vertical"><!--指定一个排列方式--> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_think_showName" /><!--文本框:用于展示用户名--> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="5" android:hint="请写心情" android:gravity="top" android:id="@+id/et_think_content" /><!--输入框:用于写心情--> <!--lines="5":输入框默认5行--> <!-- hint:提示文字--> <!--gravity="top":提示文字在最上面--> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="确定" android:onClick="ok" /></LinearLayout>
Java
第一种方式
MainActivity.java
package com.zking.android12_activity;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;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private TextView tv_main_showThink; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿到控件 et_main_uname = (EditText) findViewById(R.id.et_main_uname);//拿到写入的名字 tv_main_showThink = (TextView) findViewById(R.id.tv_main_showThink); Log.i("test","onCreate");//查看控制台测试 String content=getIntent().getStringExtra("content"); tv_main_showThink.setText(content); } //点击按钮 public void writeThink(View view){//第一个页面写心情的按钮 String uname=et_main_uname.getText().toString();//拿到用户名 Intent intent=new Intent(this,ThinkActivity.class);//跳转到第二个页面 //传值 intent.putExtra("uname",uname);//根据名字拿值 startActivity(intent); }}ThinkActivity.java
package com.zking.android12_activity;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;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //获取第一个页面传递过来的数据 String uname=getIntent().getStringExtra("uname"); tv_think_showName.setText("你好:"+uname); } //点击按钮会 public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent(this,MainActivity.class);//跳转到第一个页面 intent.putExtra("content",content); startActivity(intent); }}第二种方式
MainActivity.java
package com.zking.android12_activity;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;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private TextView tv_main_showThink; //第二种方式:干掉了自己,第一个页面onCreate不调了 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿到控件 et_main_uname = (EditText) findViewById(R.id.et_main_uname);//拿到写入的名字 tv_main_showThink = (TextView) findViewById(R.id.tv_main_showThink); Log.i("test","onCreate");//查看控制台测试 } //点击按钮 public void writeThink(View view){//第一个页面写心情的按钮 String uname=et_main_uname.getText().toString();//拿到用户名 Intent intent=new Intent(this,ThinkActivity.class);//跳转到第二个页面 //传值 intent.putExtra("uname",uname);//根据名字拿值 //startActivity(intent);//很普通的跳 A页面跳B页面 //带有目的的跳(A页面跳B页面,还要跳回来) startActivityForResult(intent,0x201);//请求码 } //获取其他页面设置过来的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("test","onActivityResult");//查看方法是否调了 String content=data.getStringExtra("content");//拿到值 tv_main_showThink.setText(content); }}ThinkActivity.java
package com.zking.android12_activity;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;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //获取第一个页面传递过来的数据 String uname=getIntent().getStringExtra("uname"); tv_think_showName.setText("你好:"+uname); } //第二种方式 //点击按钮(从第二个页面跳转到第一个页面) public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent();//不用指定了 intent.putExtra("content",content); //设置结果 setResult(0x100,intent);//16进制:0x 结果码 //自杀(干掉自己,(第二个页面跳转之前)干掉当前的(之前打开的第一个)Activity) finish(); //startActivity(intent); }}
二.传递Bundle(数据包、集装箱)类型的数据
效果图:
实现代码如下:
Java
MainActivity.java
package com.zking.android12_activity;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;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private TextView tv_main_showThink; //第二种方式:干掉了自己,第一个页面onCreate不调了 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿到控件 et_main_uname = (EditText) findViewById(R.id.et_main_uname);//拿到写入的名字 tv_main_showThink = (TextView) findViewById(R.id.tv_main_showThink); Log.i("test","onCreate");//查看控制台测试 } //点击按钮[传递数据包Bundle (集装箱)] 拿多个值 public void writeThink(View view){ String uname=et_main_uname.getText().toString();//拿到用户名 Intent intent=new Intent(this,ThinkActivity.class);//跳转到第二个页面 //传值(两组数据) //方式一 //intent.putExtra("uname",uname); //intent.putExtra("uage",19); //方式二 //传递Bundle Bundle bundle=new Bundle(); bundle.putString("uname",uname); bundle.putInt("uage",19); intent.putExtra("bundle",bundle); startActivityForResult(intent,0x201); } //获取其他页面设置过来的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("test","onActivityResult");//查看方法是否调了 String content=data.getStringExtra("content");//拿到值 tv_main_showThink.setText(content); }}ThinkActivity.java
package com.zking.android12_activity;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;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //获取第一个页面传递过来的数据 //String uname=getIntent().getStringExtra("uname"); //int uage=getIntent().getIntExtra("uage",0); //获得 第二种方式 Bundle bundle=getIntent().getBundleExtra("bundle"); String uname=bundle.getString("uname"); int uage=bundle.getInt("uage"); tv_think_showName.setText("你好:"+uname+" "+uage); } //点击按钮(从第二个页面跳转到第一个页面) public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent(); intent.putExtra("content",content); //设置结果 setResult(0x100,intent); //自杀 finish(); }}
三.传递对象时使用Serializable
创建实体类
效果图:
Java
Person.java
package com.zking.entity;import java.io.Serializable;/** * Created by Administrator on 2017/6/16 0016. */public class Person implements Serializable{ private int pid; private String pname; private int page;//右键+Generate //构造-->Constructor public Person() { } public Person(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = page; } //封装-->Getter and Setter public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } //打印 @Override public String toString() { return "Person{" + "pid=" + pid + ", pname='" + pname + '\'' + ", page=" + page + '}'; }}MainActivity.java
package com.zking.android12_activity;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;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private TextView tv_main_showThink; //第二种方式:干掉了自己,第一个页面onCreate不调了 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿到控件 et_main_uname = (EditText) findViewById(R.id.et_main_uname);//拿到写入的名字 tv_main_showThink = (TextView) findViewById(R.id.tv_main_showThink); Log.i("test","onCreate");//查看控制台测试 } //点击按钮[传递对象(对象集合)] public void writeThink(View view){ String uname=et_main_uname.getText().toString();//拿到用户名 Intent intent=new Intent(this,ThinkActivity.class);//跳转到第二个页面 //传递对象 Person person=new Person(1,"admin",19); intent.putExtra("person",person); //带有目的的跳转 startActivityForResult(intent,0x201); } //获取其他页面设置过来的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("test","onActivityResult");//查看方法是否调了 String content=data.getStringExtra("content");//拿到值 tv_main_showThink.setText(content); }}ThinkActivity.java
package com.zking.android12_activity;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;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //接收对象 Person person= (Person) getIntent().getSerializableExtra("person"); tv_think_showName.setTextSize(30);//看效果,字写大点 tv_think_showName.setText("你好:"+person.toString()); } //点击按钮(从第二个页面跳转到第一个页面) public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent(); intent.putExtra("content",content); //设置结果 setResult(0x100,intent); //自杀 finish(); }}
四.传递对象时使用Parcelable
注:布局文件和其他Activity同第三点的一样
Person.java
package com.zking.entity;import android.os.Parcel;import android.os.Parcelable;import java.io.Serializable;/** * Created by Administrator on 2017/6/16 0016. */public class Person implements Parcelable {//Alt+回车:实现两个方法 private int pid; private String pname; private int page;//右键+Generate //构造-->Constructor public Person() { } public Person(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = 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]; } }; //封装-->Getter and Setter public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { 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); }}ThinkActivity.java
package com.zking.android12_activity;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;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //接收对象 Person person=getIntent().getParcelableExtra("person"); tv_think_showName.setTextSize(30);//看效果,字写大点 tv_think_showName.setText("你好:"+person.toString()); } //点击按钮(从第二个页面跳转到第一个页面) public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent(); intent.putExtra("content",content); //设置结果 setResult(0x100,intent); //自杀 finish(); }}
五.传递对象集合
效果图:
Person.java
package com.zking.entity;import android.os.Parcel;import android.os.Parcelable;import java.io.Serializable;/** * Created by Administrator on 2017/6/16 0016. */public class Person implements Parcelable {//Alt+回车:实现两个方法 private int pid; private String pname; private int page;//右键+Generate //构造-->Constructor public Person() { } public Person(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = 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]; } }; //封装-->Getter and Setter public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { 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); }}MainActivity.java
package com.zking.android12_activity;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.ArrayList;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private TextView tv_main_showThink; //第二种方式:干掉了自己,第一个页面onCreate不调了 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //拿到控件 et_main_uname = (EditText) findViewById(R.id.et_main_uname);//拿到写入的名字 tv_main_showThink = (TextView) findViewById(R.id.tv_main_showThink); Log.i("test","onCreate");//查看控制台测试 } //点击按钮[传递对象(对象集合)] public void writeThink(View view){ String uname=et_main_uname.getText().toString();//拿到用户名 Intent intent=new Intent(this,ThinkActivity.class);//跳转到第二个页面 //传递对象 Person person1=new Person(1,"苏苏",19); Person person2=new Person(2,"萌萌",19); Person person3=new Person(3,"淼淼",19); ArrayList<Person> persons=new ArrayList<>(); persons.add(person1); persons.add(person2); persons.add(person3); //传递对象集合 intent.putParcelableArrayListExtra("persons",persons); //带有目的的跳转 startActivityForResult(intent,0x201); } //获取其他页面设置过来的结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.i("test","onActivityResult");//查看方法是否调了 String content=data.getStringExtra("content");//拿到值 tv_main_showThink.setText(content); }}ThinkActivity.java
package com.zking.android12_activity;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.List;public class ThinkActivity extends AppCompatActivity { private TextView tv_think_showName; private EditText et_think_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_think); //做展示,拿到文本框 tv_think_showName = (TextView) findViewById(R.id.tv_think_showName); //拿到第二个页面输入框中写的心情内容 et_think_content = (EditText) findViewById(R.id.et_think_content); //接受对象集合 List<Person> persons=getIntent().getParcelableArrayListExtra("persons"); tv_think_showName.setTextSize(30); for (Person person : persons) { tv_think_showName.setText(tv_think_showName.getText()+"\n"+person.toString()); } } //点击按钮(从第二个页面跳转到第一个页面) public void ok(View view){//第二个页面的ok按钮 String content=et_think_content.getText().toString();//拿到写的心情的内容 Intent intent=new Intent(); intent.putExtra("content",content); //设置结果 setResult(0x100,intent); //自杀 finish(); }}
阅读全文
0 0
- 12.在Activity页面之间传递数据
- Activity页面之间数据传递
- Activity页面之间数据传递
- Activity页面之间数据传递
- Activity页面之间数据传递
- Activity页面之间数据传递
- 在Activity之间传递数据
- Android-Activity页面之间的数据传递
- Activity页面之间的数据传递
- Android-Activity页面之间的数据传递
- Activity页面之间的数据传递
- Android 在两个 Activity 之间传递数据
- 使用Bundle在Activity之间传递数据
- 在不同Activity之间传递数据
- 使用Bundle在Activity之间传递数据
- 在不同Activity之间传递数据
- 在不同activity之间数据传递
- 用Intent在Activity之间传递数据
- How to Get Code into a Docker Container
- 利用WordPress REST API 开发微信小程序从入门到放弃
- 554. Brick Wall
- mysql 统计一个表中各类别的数目,并保存
- 初学html
- 12.在Activity页面之间传递数据
- jsp之JDBC连接数据库MySQL
- spring mvc spring jdbc多数据源处理
- HTML中DOM元素的子节点为空?!firstChild, lastChild, childeNodes[]为空
- Unity游戏UI框架(一)
- 【修真院“善良”系列之二】产品经理应该懂哪些术语?
- CentOS卸载系统自带的OpenJDK安装sun公司的jdk
- KSGT
- 传统公司转型路上是怎么死的