Android——Activity页面之间的数据传递

今天主要讲Activity页面之间的数据传递,在这里我就简单的用代码来和大家讲一下怎么去用,以及一些注意事项。

下面代码是两个页面之间的数据传递

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代码:

因为数据传递有关于传递对象的部分,所以这里先写个实体类

这里需要注意一下:使用Serializable和Parcelable都可以传递对象,但Serializable只能传递对象,不能传递对象集合

/** 
 * 传递对象实现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代码:

这里注意:为了这边能获取到数据,页面的跳转要使用startActivityForResult

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


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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值