欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中Activity 之间传递参数

程序员文章站 2023-11-23 20:57:10
android 中activity 之间传递参数 1.传递简单数据 在a activity中 findviewbyid(r.id.startbacticity...

android 中activity 之间传递参数

1.传递简单数据

在a activity中

findviewbyid(r.id.startbacticitybtn).setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        intent i = new intent(mainactivity.this,theactivity.class);
//        对基础的数据类型进行传递
       i.putextra("data","我是国人");
       startactivity(i);
      }
    });

在b activity中接受数据

  tv =(textview)findviewbyid(r.id.thetextview);
    intent i = getintent();
    tv.settext(i.getstringextra("data"));

这种传值就是传递基本的数据类型

2.传递数据 包bundle

在a activity中

 findviewbyid(r.id.startbacticitybtn).setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        intent i = new intent(mainactivity.this,theactivity.class);
        bundle bundle = new bundle();
        bundle.putstring("name","qll");
        bundle.putint("age",3);

//        i.putextras(bundle); 
//        另种传递方式
        i.putextra("data",bundle);
        startactivity(i);
      }
    });
  }

在b activity中接受数据     

 tv =(textview)findviewbyid(r.id.thetextview);
    edittext = (edittext) findviewbyid(r.id.edittext3);
    intent i = getintent();
//    bundle date = i.getextras();
//     接受方式不同
    bundle date = i.getbundleextra("data");
    tv.settext(string.format("name=%s,age=%d",date.getstring("name"),date.getint("age")));

这总传递方式类似ios中传递字典数据类型过来 。

3.传递值对象

自定义一个user类,传递自定义类需要对类进行序列化

用serializable进行序列化

这种方法只需要类实现serializable接口就可以了

user 类

import java.io.serializable;

public class user implements serializable{

  private string name;
  private int age;

  public int getage(){
    return age;
  }

  public void setage(int age){
    this.age = age;
  }

  public string getname(){
    return name;
  }

  public void setname(string name){
    this.name = name;
  }

  public user(string name,int age){
    this.name = name;
    this.age = age;
  }

在a activity中   

  findviewbyid(r.id.startbacticitybtn).setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        intent i = new intent(mainactivity.this,theactivity.class);
        i.putextra("user",new user("qll",24));
        startactivity(i);
      }
    });
  }

在b activity中

 tv =(textview)findviewbyid(r.id.thetextview);
 user user = (user)i.getserializableextra("user");
 tv.settext(string.format("user info(name=%s,age=%d)",user.getname(),user.getage()));

用parcelable实现

同样的需要实现parcelable接口

user 类

package com.example.wyhaiapple.transferdata1;

import android.os.parcel;
import android.os.parcelable;
import android.text.parcelablespan;

public class user implements parcelable{
  private string name;
  private int age;

  public int getage(){
    return age;
  }

  public void setage(int age){
    this.age = age;
  }

  public string getname(){
    return name;
  }

  public void setname(string name){
    this.name = name;
  }

  public user(string name,int age){
    this.name = name;
    this.age = age;
  }

  @override
  public int describecontents() {
    return 0;
  }

  @override
  public void writetoparcel(parcel dest, int flags) {
    dest.writestring(getname());
    dest.writeint(getage());
  }


  public static final creator<user> creator = new creator<user>() {
    @override
    public user createfromparcel(parcel source) {
      return new user(source.readstring(),source.readint());
    }

    @override
    public user[] newarray(int size) {
      return new user[size];
    }
  };
}

在a activity中 与上面的相同

在b activity中

 tv =(textview)findviewbyid(r.id.thetextview);
 user user = (user)i.getparcelableextra("user");
 tv.settext(string.format("user info(name=%s,age=%d)",user.getname(),user.getage()));

4.获取 activity 的返回参数

在b activity中

protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_the);
    tv =(textview)findviewbyid(r.id.thetextview);
    edittext = (edittext) findviewbyid(r.id.edittext3);

    findviewbyid(r.id.button2).setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        intent i = new intent();
        i.putextra("data",edittext.gettext().tostring());
        setresult(1,i);
        finish();
      }
    });
  }
}

在a activity中

startactivityforresult(i,0);

  @override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {
    super.onactivityresult(requestcode, resultcode, data);
    textview.settext("返回的值:"+data.getstringextra("data"));
  }

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!