自学Android之Activity:(三)使用Intent在Activity中跳转和传值(上)

来源:互联网 发布:天猫数据直播间 编辑:程序博客网 时间:2024/06/07 01:04

转载请注明出处:http://blog.csdn.net/cc_xz/article/details/61195418

前言:

在本篇中我们将讨论关于Intent在Activity中的使用,包括多个Activity间的跳转、在Activity间传递一些值等。经过两篇啰里吧嗦的两篇,本篇将不加逗M图片,尽量精简语句!

在本篇中你将了解到:
1.常用的Button组件和TextView组件。
2.使用Intent在Activity中进行跳转。
3.在进行跳转动作时专递一些值。

两个简单的组件:
在开始本篇正式内容前,先来看两个简单的组件,分别是Button(按钮)和TextView(文本显示)。前面所说的为什么模拟器会显示“Hello World!”,就是把这个字符串放到了TextView中用以显示。
那么现在来看看我们的布局文件。注1

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="这是主活动"        android:id="@+id/TextViewShow"/>    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"         android:text="跳转第二个Activity"        android:id="@+id/ButtonToActivity"/></LinearLayout>

现在我们只需要关注TextView和Button就可以了。创建两个组件很简单,前两个参数分别表示这个组件的宽度和高度,match_parent表示占满整个屏幕,wrap_content表示根据组件中的内容决定大小。那么这两行代码就决定了,组件的宽度是占满屏幕的,而高度是根据组件中的内容决定。
text属性则是表示在这个组件中显示什么字符串,也就是这个属性决定了组件中的内容。
那么创建了这两个组件应该怎么使用呢?当然是在Activity中去使用了,而id属性则是给组件起了一个名字,告诉Activity,通过组件的id就可以找到这个组件。

在程序中使用这两个组件以及创建第二个Activity:

现在组件已经有了,那么如何使用是我们现在要讨论的问题,现在回到你的Activity中,添加如下代码:

public class MainActivity extends AppCompatActivity {    private String TAG = "这是MainActivity发出的消息:";    private Button mButtonToActivity;    private TextView mTextView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mButtonToActivity = (Button) findViewById(R.id.ButtonToActivity);        mTextView = (TextView) findViewById(R.id.TextView);        mButtonToActivity.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {            }        });    }}

首先来看,我们创建了两个全局变量,而格式则分别为Button和TextView,这里我建议你把变量的名称设置的同Layout布局文件中的id一致,因为你后面面对的可不仅仅是这两个组件。接着我们在onCreate()中给这两个变量赋值了,都是通过findViewById()来获取到在Layout中设置的id属性。但是获取到的id的格式是View类型的(现在你无需关心),所以要强制转型为前面所设置的格式。这一步骤属于初始化这个组件。
接着发现我们对Button进行了一些操作。setOnClickListener()是设置整个按钮的监听,否则用户按下去一点反应都没有,这很不科学,对吧?接着在这个方法中新建了一个内部匿名类(也有其他方式不过个人还是更喜欢这种方式),这段代码就是让你的程序时刻监听这个按钮,如果被用户点击了,就执行onClick中的操作。
这样你就完成了对组件的操作,当然现在我们还没有添加逻辑代码,也没有使用TextView,毕竟现在还在准备阶段。

现在来通过下图创建你的第二个Activity:
这里写图片描述
我更加推荐你使用这种方式,因为如果你单纯的创建一个类来当做Activity,即是你的类是继承自AppCompatActivity,在运行这个项目时仍然会报错。注2;
当你创建完成第二个Activity以后,现在你需要参考前边的代码,给第二个Activity也创建Button和TextView。在此过程中你需要注意组件的text和id属性,要注意区分。详细内容此处不表。

开始使用Intent在两个Activity中跳转:

这时我们先在MainActivity的Button的监听器中添加代码,如下:

        mButtonToActivity.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this,TwoActivity.class);                startActivity(intent);            }        });

这里创建了一个Intent类型的对象,在初始化Intent对象时,传递了两个参数,第一个你可以理解为源Activity,第二个理解为目标Activity。即从谁,跳转到哪里?值得注意的是,源Activity的后缀为.this,目标Activity的后缀为.class。
而通过startActivity()将创建的Intent对象作为参数,执行跳转的操作。
那么现在你可以到第二个Activity中也添加相同的Intent操作,来实现两个Activity之间相互跳转。
实现效果如下:
这里写图片描述
其实实现起来还是蛮简单的,需要的代码也不多。

在Intent跳转时传值:

Intent跳转一般是用于界面切换时,但实际上在跳转的时候还需要添加一些参数。现在是时候对TextView进行操作了。本部分会设置到给Intent的赋值和取值两块,先来看一下Intent的赋值,代码如下:

        mButtonToActivity.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(TwoActivity.this,MainActivity.class);                intent.putExtra("TextView","这是通过Intent传递过来的值而改变的文本,它是第二个Activity。");                startActivity(intent);            }        });

这是在MainActivity中添加的代码。通过Intent的putExtra()就可以在传递的Intent中添加你希望的数据,首先你需要添加一个String类型的文本信息,这个信息就是Key值,因为很多时候你不仅只传递一个值,所以需要通过Key值来确定你当前需要取出哪个数据。你可以在里面添加int、String等等很多类型,甚至还包括他们的数组类型。你可以通过Android Studio中自带的方法浏览看到他们所接受的参数,如下:
这里写图片描述
然后到TwoActivity中去取出对应的值,代码如下:

        if (getIntent().getStringExtra("TextView") != null){            mTextView.setText(getIntent().getStringExtra("TextView"));        }

上面的代码是在TwoActivity的onCreate()中添加的。首先通过if判断,如果返回值为true,则执行代码块中的代码,返回值为false则越过代码块。也就是说,如果没有正确的接收到数据,就不改变TestView的内容。
首先通过getIntent()来获取TwoActivity接收到的关于Intent的内容,值得注意的是,这里使用的不是Intent对象。接着通过getStringExtra()获取String类型的数据,这里就通过在MainActivity中定义的Key值来确定要取出哪条数据来进行对比。如果取出的值不为空,则通过TextView的.setText来设置TextView中显示的内容。而内容同样通过Intent传递的数据来获得。
值得注意的是,如果你传递的不是String类型的数据,则取出数据时使用的也就不是getStringExtra()。你可以自己尝试查看都有哪些方法来获取Extra(其实就是数据)。
效果如下:
这里写图片描述
现在你可以考虑尝试自己一个小任务,即:从TwoActivity中返回MainActivity时,也将MainActivity中的TextView的内容进行改变。

文章中的注释们:
注1:
与本内容无关的项目已马赛克,你可以参考下图找到布局文件,:
这里写图片描述
Key:1=点击这里可以显示中你的项目的结构。
Key:2=通过这里选择不同的查看模式,Android模式可以让你看到只与你项目中使用频率最高的文件夹和文件。
Key:3=这就是你的布局文件。你的Activity文件就在隔壁Java目录中,去找找吧。
注2:
如果你使用图片中创建的方式,Android Studio会帮助你完成很多初始化的工作,例如会根据你的类名创建一个对应的Layout(布局文件),但是更重要的是,它会帮助你在Android中将这个Activity进行注册。你现在只需要知道Activity属于Android的四大组件之一,而四组件的使用必须在Android中进行注册。
这里写图片描述
Key:1=在AndroidManifest.xml中进行注册。
Key:2=这条就是Android Studio帮忙注册的信息,当然你也可以手动添加。另外你可以观察MainActivity中的注册信息,后边会详细说明。
后记:

当然本篇中的内容有很大一部分是介绍组件和第二个Activity的,这是考虑到初初初学者,毕竟我当初在自己学习的时候,有很多大神不屑于去讲的问题,我却卡壳很久。虽然并没有人看,但仍然需要这么考虑。不过我在前面的文章中说到的内容,后续篇章将不会再重复,所以知识点也会越来越深入。下一篇将会讨论Intent的更实用的方法。

1 0
原创粉丝点击