zoukankan      html  css  js  c++  java
  • 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();
                }
            });
    
        }
    }

    运行下,大功告成。

  • 相关阅读:
    ASP.NET MVC案例——————拦截器
    Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
    Windows Azure Storage (20) 使用Azure File实现共享文件夹
    Windows Azure HandBook (5) Azure混合云解决方案
    Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
    Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
    Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
    Azure China (9) 在Azure China配置CDN服务
    Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
    Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5930670.html
Copyright © 2011-2022 走看看