Android学习之Activity传参

一、传参的三种方法

场景分两步:

1、从第一个Activity传递参数到第二个Activity,接受并显示。

2、第二个Activity文本框输入信息,并传到第一个Activity。

传参前需要先定义Intent

Intent i=new Intent(MainActivity.this,TheAty.class);//参数一当前Activity,参数二跳转Activity

传参的集中方法

1、putExtra

类似是键值对,第二个参数可以传不同类型的值

a)赋值

i.putExtra("data","Hellow,zhangsan");

b)取值

i.getStringExtra("data")

 

2、使用Bundle

根据类型不同使用不同的put方法

 

a)赋值

Bundle b=new Bundle();
b.putString("name","hello,张三");
i.putExtras(b);

b)取值:

Bundle data=i.getExtras();
data.getString("name");

 

3、使用对象

a)定义一个User对象,包含nameage属性

public class User  implements Parcelable{
    private String name;
    private int age;


    public  int GetAge(){
        return this.age;
    }
    public  void SetAge(int age){
        this.age=age;
    }


    public  String GetName(){
        return this.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 i) {
        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];
        }
    };
}

这里采用Android的Parcelable序列号接口,重写describeContents和writeToParcel方法,定义常量CREATOR。当然也可以用Java的Serializable接口,实现代码更少。

 

b)传参

i.putExtra("user",new User("zhangsan",18));

c)取值

User u=(User)i.getParcelableExtra("user");
tv.setText(String.format("User info(name=%s,age=%d)",u.GetName(),u.GetAge()));

 

 

二、实现的代码和步骤:1、先定义第一个Activity

加上button和TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.lisheng.sendargs.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/btnStartAty"  android:text="启动另一个Activtiy"/>

    <TextView
        android:text=""
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />
</LinearLayout>

 

2、第一个Activity后代码台实现

public class MainActivity extends AppCompatActivity {

    private TextView textView;//定义TextView
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView=(TextView)findViewById(R.id.textView);//根据ID获得TextView对象

        findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                Intent i=new Intent(MainActivity.this,TheAty.class);
                i.putExtra("user",new User("zhangsan",18));
                startActivityForResult(i,0);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        textView.setText("返回的数据:"+data.getStringExtra("data"));
    }
}

这里需要注意的有点

1)获得元素是根据元素ID  findViewById(R.id.textView);

2)给Button绑定点击事件: setOnClickListener(new View.OnClickListener(){}

3)要想获取第二个Activity返回的值,需要重写onActivityResult方法

 

3、第二个Activity页面

定一个TextView用于显示接受第一个传来的值;定义一个EditText,写入值;定义一个Button;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_the_aty"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.lisheng.sendargs.TheAty">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"  android:id="@+id/tv"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Name"
        android:ems="10"
        android:id="@+id/editText" />

    <Button
        android:text="Send Back"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button" />
</LinearLayout>

 

4、第二个Activity后台代码实现

public class TheAty extends AppCompatActivity {


    private TextView tv;
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_the_aty);
        Intent i= getIntent();
        tv= (TextView) findViewById(R.id.tv);
        editText=(EditText)findViewById(R.id.editText);
        User u=(User)i.getParcelableExtra("user");//获取传入的User对象
        tv.setText(String.format("User info(name=%s,age=%d)",u.GetName(),u.GetAge()));//显示到TextView
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){
            //定义Button点击事件
            @Override
            public void onClick(View view) {
                Intent i=new Intent();
                i.putExtra("data",editText.getText().toString());
                setResult(1,i);
                finish();
            }
        });

    }
}

 

运行下,大功告成。

 

转载于:https://www.cnblogs.com/GallopingSnail/p/5930670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,我们可以使用Intent在不同的Activity之间传递参数。下面是一些常用的传递参数的方法: 1.使用putExtra()方法传递参数 在发送Intent的Activity中使用putExtra()方法来添加参数,例如: ```java Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("name", "John"); intent.putExtra("age", 25); startActivity(intent); ``` 在接收Intent的Activity中使用getXXXExtra()方法来获取参数,例如: ```java Intent intent = getIntent(); String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", 0); // 如果获取不到该参数,则返回默认值0 ``` 2.使用Bundle对象传递参数 在发送Intent的Activity中创建一个Bundle对象,将需要传递的参数放入Bundle中,例如: ```java Intent intent = new Intent(this, SecondActivity.class); Bundle bundle = new Bundle(); bundle.putString("name", "John"); bundle.putInt("age", 25); intent.putExtras(bundle); startActivity(intent); ``` 在接收Intent的Activity中使用getExtras()方法来获取Bundle对象,然后从Bundle中获取参数,例如: ```java Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age", 0); // 如果获取不到该参数,则返回默认值0 ``` 以上两种方法都可以用来传递基本数据类型、字符串、数组等数据类型。如果需要传递自定义类型的参数,则需要将该对象实现序列化接口,例如: ```java public class Person implements Serializable { private String name; private int age; // 省略getter和setter方法 } ``` 然后在发送Intent的Activity中使用putExtra()方法传递Person对象,例如: ```java Intent intent = new Intent(this, SecondActivity.class); Person person = new Person(); person.setName("John"); person.setAge(25); intent.putExtra("person", person); startActivity(intent); ``` 在接收Intent的Activity中使用getSerializableExtra()方法来获取Person对象,例如: ```java Intent intent = getIntent(); Person person = (Person) intent.getSerializableExtra("person"); ``` 希望以上内容能够解决你的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值