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

    运行下,大功告成。

  • 相关阅读:
    easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
    原生js上传图片时的预览
    yield的理解
    js时间格式化
    js 实现复制粘贴时注意方法中需要两次点击实现的bug
    jquery 页面分页的实现
    easyui dialog 表单提交,弹框初始化赋值,dialog实现
    a标签(普通标签如span)没有disabled属性 ,怎样利用js实现该属性
    js之数据类型(对象类型——构造器对象——数组2)
    js之数据类型(对象类型——构造器对象——数组1)
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5930670.html
Copyright © 2020-2023  润新知