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();    }}

那么到这里,四种传递方式也就到此为止了,有什么问题可以提出来,我们一起讨论讨论!












原创粉丝点击