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对象,包含name和age属性

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

    }
}

运行下,大功告成。

时间: 2024-10-29 19:12:17

Android学习之Activity传参的相关文章

Android学习之Activity跳转与传值

Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. 一.Activity跳转 方法一 Intent intent = new Intent(A.this, B.class); startActivity(intent) 方法二 Intent intent = new Intent(); intent.setClass(A.this, B.class); startActivity(intent); 实现从A跳转到B(A.B均继承自Activity) 二

Android学习笔记-Activity&Intent

界面activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="matc

android学习之activity

Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理.与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的. Activity 的状态及状态间的转换 在 android 中,Activity 拥有四种基本状态: Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. Paused 当 Activ

Android学习笔记——Activity的启动和创建

http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记--Activity的启动和创建 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函数基本上没有任何意义的: 于是想深入了解一下Activity到底是怎么一回事怎么运行来的:里面的东东真是叫个庞大: 现在只能简单的了解其框架性的概念和流程: 一 Activity概念 Android的核心不是Applicati

Android学习杂记-Activity基础知识

本文摘录自Tekkaman博客. [Activity介绍] 一个Activity是一个应用程序组件,提供一个屏幕,方便和用户实现交互.每一个activity被给予一个窗口,在上面可以绘制用户接口.在一个Activity创建时,其实现的onCreate(Bundle savedInstanceState)方法将被系统回调,通常在这个方法里调用setContentView(View view)方法加载显示布局文件UI,并利用findViewById方法获取布局UI中的控件,对其修改数据或填充数据.

Android学习之Activity初步

Activity作为Android的第一步接触的概念,在学习中将初步的认识总结下来,以便后续的回顾与反思. 1.在用Android Studio生成第一个helloworld应用程序运行在手机上时,发现继承自Activity的MainActivity生成的界面上,默认的Label是不可见的,即使在AndroidManifest文件中定义android:Label="This is FirstActivity"也无济于事.后来才发现应该是继承Activity的原因,将其改为extends

android学习四---Activity和Intent

1.android项目资源深入了解 在深入学习android之前,先好好玩玩手机上的应用,大部分程序都有一个图标,点开图标,程序启动,一定时间后,程序会跳转到第一个界面,比如手机QQ,点开图标,会跳出一幅图,接着就跳到QQ登陆的界面(如下图).这个界面里有输入框输入QQ号码,密码,有个登陆按钮,有记住密码选择框,还有一些图标和文本.如果你输入了密码和账号后,点击登陆,程序就会响应.发送到服务器端会检查账号,密码.账号密码一致的话就会就会跳到用户界面. 假设需要实现这样的一个界面,对应的andro

Android学习之Activity深入

activitiy中打开一个Aactivitiy,Aactivitiy会走以下生命周期 onCreate–>onStart–>onResume–>A运行–>发出打开B的intent–>AonPause–>B可见–>AonStop,此时B经历同样的生命周期, 等B结束,A再度可见,onRestart–>onStart–>onResume 注意:AonPause之后B可见,为了不影响B界面的显示,这里最好不要在A的onPause中做耗时操作,耗时操作可以在

Android学习(一)Activity

一丶什么是活动(Activity)     活动是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序可以包含零个或多个活动. 二丶活动的基本用法 首先需要在AndroidManif中对活动进行注册: <activity> ...... </activity>      还可以在Acitiviy的类中的OnCreate方法中用requestWindowFeature方法指定活动的标题栏 当然可以使用findViewById()方法来使用在资源文件里加载的资源.如: Bu