学习Android这段时间以来,我一直在考虑如何打开另一个Activity的事情,可是某人和我说这不重要,很简单,你先学增删改需要用到的东西,先把单页面学流畅了,再来弄这个。
既然他说简单,那我才有动力嘛,今天研究了一下,果然也不是费神的事儿。
上周升级了AndroidStudio2.0,以后在官方未升级之前都用这个版本来学习。
这篇文章里需要达到的目的是: 在主Activity中点击一个按钮,跳转到另一个Activity,并显示前一个Activity中EditText的值。
创建第二个Activity
一、新建一个工程My Application3,在layout目录下新建activity_2.xml。
二、在MainActivity.java同目录下新建TwoActivity.java,基本构造如下,包含onCreate函数,可参照MainActivity.java。
package com.my.asus.myapplication3;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
/**
* Created by Asus on 2016/4/21.
*/
public class TwoActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
}
}
声明所有Activity
三、打开AndroidManifest.xml,添加如下代码,不声明所有Activity,可能会出现闪退的情况。元素声明了TwoActivity的父activity的名称。
<activity
android:name=".TwoActivity"
android:label="@string/title_TwoActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
添加按钮点击事件
四、打开layout/activity_main.xml,添加一个EditText和一个Button,并为Button添加onClick属性。
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
android:id="@+id/Click_Button"
android:layout_marginTop="58dp"
android:onClick="sendMessage"/>
创建Intent
Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:
启动 Activity: Activity 表示应用中的一个屏幕。通过将 Intent 传递给startActivity(),您可以启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何必要的数据。 如果您希望在 Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,您的
Activity 将结果作为单独的 Intent 对象接收。如需了解详细信息,请参阅Activity指南。
启动服务: Service
……
传递广播:
……
(以上内容引自https://developer.android.com/intl/zh-cn/guide/components/intents-filters.html)
五、MainActivity.java中添加sendMessage函数,用来呼应xml中的onClick=”sendMessage”,创建Intent,并启动第二个Activity。
一个Intent可以携带各种各样类型的数据集,使用putExtra()函数来传递。
public void sendMessage(View v){
Intent intent=new Intent(this , TwoActivity.class);
EditText editText=(EditText) findViewById(R.id.editText);
String message=editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE,message);
startActivity(intent);
}
六、创建第五步中报错的EXTRA_MESSAGE,这个是为了在另一个Activity中查询到传递过来的值。在MainActivity顶部定义一个公共常量EXTRA_MESSAGE
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE="com.my.asus.myapplication3.MESSAGE";
……
}
接收Intent 并显示传递的值
七、打开TwoActivity.java,并加入如下代码。
public class TwoActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
Intent intent=getIntent();
String message=intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView=new TextView(this);
textView.setTextSize(40);
textView.setText(message);
setContentView(textView);
// TextView textView=(TextView) findViewById(R.id.two_tV);
// textView.setText(message);
}
}
使用getIntent()来接收MainActivity中使用的Intent,定义一个String用来接收EXTRA_MESSAGE的值,并显示出来。这里既可以在代码中写TextView,也可以到xml中创建一个TextView,然后直接用我注释的代码。
效果