activity启动另一个activity_课程开发的四个步骤

activity启动另一个activity_课程开发的四个步骤本课教会教你 本课教会教你 本课教会教你 相应发送按键 构建一个Intent 启动另一个Activity 创建第二个Activity 接受Intent 显示信息 完成了上一节课的内容,你已经拥有了一个app,它可以显示一个activity (单个屏幕),里面有文本编辑区和一个按键。 在本课中,你将会

本课教会教你

完成了上一节课的内容,你已经拥有了一个app,它可以显示一个activity (单个屏幕),里面有文本编辑区和一个按键。 在本课中,你将会在MainActivity中添加一些代码,使得用户点击Send按钮时启动一个新的activity。

响应Send按键


为了响应按键的点击事件,打开activity_main.xml布局文件并且添加android:onClick 属性到<Button> 元素中:

[html] view plain copy

 
  1. <Button  
  2.     android:layout_width=“wrap_content”  
  3.     android:layout_height=“wrap_content”  
  4.     android:text=“@string/button_send”  
  5.     android:onClick=“sendMessage” />  

截图如下:

activity启动另一个activity_课程开发的四个步骤

这个android:onClick 属性的值,"sendMessage",就是按键单击处理函数名。

打开MainActivity 类 (在项目的src/ 目录中) 并且添加对应的方法:

[html] view plain copy

 
  1. /** Called when the user clicks the Send button */  
  2. public void sendMessage(View view) {  
  3.     // Do something in response to button  
  4. }  

这时要加载 View 类:

[html] view plain copy

 
  1. import android.view.View;  

提示: 在Eclipse中, 按下Ctrl + Shift + O 可以加载缺少的类(Cmd + Shift + O on Mac)。

添加代码前截图:

activity启动另一个activity_课程开发的四个步骤

添加代码后截图:

activity启动另一个activity_课程开发的四个步骤

.Java文件中的按键处理函数名必须和.xml文件中的onClick属性的值一致,而且,按键处理函数必须满足以下条件:

  • 属于公有函数
  • 有一个void型的返回值
  • 有且只有一个 View 参数 (这就是将被点击的View )

接下来,你将会填充这个函数来读取文本编辑区的内容,并且将它发送到另外一个activity。

构建一个Intent


一个 Intent 就是一个对象,提供在运行时绑定分开的组件的服务(例如两个activity)。 这个Intent 代表一个app “意图做某事” 。你可以使用intent来实现各种任务,但通常情况下它被用于启动另外一个 activity。

sendMessage()方法里面,创建一个 Intent 来启动一个activity,叫做DisplayMessageActivity

[html] view plain copy

 
  1. Intent intent = new Intent(this, DisplayMessageActivity.class);  

截图如下所示:

activity启动另一个activity_课程开发的四个步骤

这里的构造函数使用了两个参数:

  • 一个 Context 作为第一参数(因为Activity 类是Context 的一个子类)
  • 系统将要递送Intent到的app组件的类 (这时activity应该已经启动)

注意: 在例IDE中引用DisplayMessageActivity将会出现错误,例如Eclipse,因为这个还没有存在。现在先不管它,下面将会创建这个类。

一个intent不仅允许你启动另外一个activity,而且可以将大量信息携带给这个activity。 在sendMessage()方法里面,使用findViewById() 去获取EditText 元素和它的文本到当前的intent中:

[html] view plain copy

 
  1. Intent intent = new Intent(this, DisplayMessageActivity.class);  
  2. EditText editText = (EditText) findViewById(R.id.edit_message);  
  3. String message = editText.getText().toString();  
  4. intent.putExtra(EXTRA_MESSAGE, message);  

注意:你需要导入Android.content.Intent和android.widget.EditText的声明。 将会定义一个EXTRA_MESSAGE常量。

截图如下所示:

activity启动另一个activity_课程开发的四个步骤

一个Intent 可以携带许多数据类型作为关键值对,叫做extras。 这个putExtra() 方法的第一参数是使用关键名字,第二个方法是其值。

为了使得下一个activity可以查询extra数据,你应该用一个公共常量来定义你的extra的key。所以在MainActivity类的顶部添加EXTRA_MESSAGE的定义

 

[html] view plain copy

 
  1. public classMainActivityextendsActivity{    
  2.         publicfinalstaticString EXTRA_MESSAGE=“com.example.myfirstapp.MESSAGE”;    
  3.        …  
  4. }  

 

截图如下:

activity启动另一个activity_课程开发的四个步骤

用你的app包的名字的前缀来为你的intent extras定义key是一个很好的习惯。这保证了当你的app和其它app交互时,它们是独一无二的。

启动第二个Activity


为了启动一个activity, 调用 startActivity()并且传递你的Intent。系统接受这个调用并且启动一个Intent定义的Activity 实例。

完整的sendMessage() 方法如下所示:

[html] view plain copy

 
  1. /** Called when the user clicks the Send button */  
  2. public void sendMessage(View view) {  
  3.     Intent intent = new Intent(this, DisplayMessageActivity.class);  
  4.     EditText editText = (EditText) findViewById(R.id.edit_message);  
  5.     String message = editText.getText().toString();  
  6.     intent.putExtra(EXTRA_MESSAGE, message);  
  7.     startActivity(intent);  
  8. }  

截图如下所示:

activity启动另一个activity_课程开发的四个步骤

为了使得这个方法能够正常工作,你需要创建DisplayMessageActivity类。

创建第二个Activity


在Eclipse中创建一个新的activity:

  1. 点击工具栏中的 New activity启动另一个activity_课程开发的四个步骤
  2. 在弹出的窗体中,打开Android 目录并且选择Android Activity。点击Next
  3. 选择BlankActivity然后点击Next.
  4. 填写activity的详细信息:
    • Project: MyFirstApp
    • Activity Name: DisplayMessageActivity
    • Layout Name: activity_display_message
    • Title: My Message
    • Hierarchial Parent: com.example.myfirstapp.MainActivity
    • Navigation Type: None

    点击 Finish

 

activity启动另一个activity_课程开发的四个步骤

Figure 1. The new activity wizard in Eclipse.

 

如果你使用其他的IDE或者命令行,在工程的src/目录下紧跟着MainActivity.java创建一个DisplayMessageActivity.java文件。

打开DisplayMessageActivity.java 文件。 如果你使用Eclipse来创建activity:

  • 这个类中已经包含了所需的 onCreate()方法的一个实现。
  • 此外,它还包含了一个onCreateOptionsMenu() 方法的实现,但是这个app中并不需要,因此你可以将其删除。
  • 最后,它还包含了一个onOptionsItemSelected() 的实现,它用于处理action bar的Up行为。这个保持原装即可。

由于 ActionBar APIs 在HONEYCOMB (API 等级 11)和更高的本版中才有效,因此你在getActionBar() 方法前必须添加一个条件,以检查当前的平台版本。另外,你必须在onCreate() 方法前添加@SuppressLint("NewApi") 标签来避免 lint 错误。

注意:在我使用的版本中,第一步已经自动完成,但是是通过新建一个函数来完成的。第二步就要自己添加了。

这个DisplayMessageActivity 类应该如下所示:

[html] view plain copy

 
  1. public class DisplayMessageActivity extends Activity {  
  2.   
  3.     @SuppressLint(“NewApi”)  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.activity_display_message);  
  8.   
  9.         // Make sure we’re running on Honeycomb or higher to use ActionBar APIs  
  10.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  
  11.             // Show the Up button in the action bar.  
  12.             getActionBar().setDisplayHomeAsUpEnabled(true);  
  13.         }  
  14.     }  
  15.   
  16.     @Override  
  17.     public boolean onOptionsItemSelected(MenuItem item) {  
  18.         switch (item.getItemId()) {  
  19.         case android.R.id.home:  
  20.             NavUtils.navigateUpFromSameTask(this);  
  21.             return true;  
  22.         }  
  23.         return super.onOptionsItemSelected(item);  
  24.     }  
  25. }  

如果你使用其他IDE,使用上面都的代码来更新你的 DisplayMessageActivity类。

部分截图:——和上面的代码有点出入,这里新添加了一个setupActionBar()函数,然后在里面做版本检查;另外,在我的版本中,添加@SuppressLint("NewApi")将会导致编译不通过。因此最后我把它删了。

activity启动另一个activity_课程开发的四个步骤

 

 Activity  的所有子类都必须实现onCreate()方法。当创建一个新的actiity实例时,系统就调用这个函数。 这个函数就是你必须使用setContentView() 定义activity布局的地方,也是你执行activity组件初始化的地方。

注意: 如果你使用其它的IDE,你的工程将没有setContentView() 所需的activity_display_message布局。这没所谓的,因为你将会更新这个方法,而这个布局也用不上。

添加标题字符串

如果你使用Eclipse,你可以跳到下一小节,因为模版已经为新的activity提供了标题字符串。

如果你使用的是其他IDE,添加如下标题到strings.xml文件中:

[html] view plain copy

 
  1. <resources>  
  2.     …  
  3.     <string name=“title_activity_display_message”>My Message</string>  
  4. </resources>  

添加到清单

所有的activities必须在你的清单文件AndroidManifest.xml中使用一个<activity> 元素来声明。

当你使用Eclipse工具来创建activity,它创建一个默认的入口。如果使用不同的IDE,你需要自己添加清单入口,如下所示:

[html] view plain copy

 
  1. <application … >  
  2.     …  
  3.     <activity  
  4.         android:name=“com.example.myfirstapp.DisplayMessageActivity”  
  5.         android:label=“@string/title_activity_display_message”  
  6.         android:parentActivityName=“com.example.myfirstapp.MainActivity” >  
  7.         <meta-data  
  8.             android:name=“android.support.PARENT_ACTIVITY”  
  9.             android:value=“com.example.myfirstapp.MainActivity” />  
  10.     </activity>  
  11. </application>  

截图如下所示:

activity启动另一个activity_课程开发的四个步骤

 android:parentActivityName 属性声明了这个activity的父activity的名字。 系统使用这个值来实现默认的导航行为,例如Android 4.1 (API level 16)或者更高版本中的Up navigation 。你可以使用 Support Library 并且添加如上所示的  <meta-data>  元素来为一些旧版本的Android提供导航。

注意: 你的 Android SDK 应该已经包含了最新的Android支持库。 它已经包含在ADT绑定包里面,但是如果你使用其他IDE,你应该在Adding Platforms and Packages 中安装他它。当你使用Eclipse中的模版,支持库自动的添加到你的app工程中(你可以在Android的依赖关系中看到库的JAR文件)如下图所示。如你不使用Eclipse,你需要手动添加这个库到你的工程中—按照setting up the Support Library的向导。

activity启动另一个activity_课程开发的四个步骤

如果你使用Eclipse进行开发,你现在可以运行你的app了。但是没有太多效果。点击Send按键启动第二个activity,但是它使用模版提供的默认的 “Hello world”布局。你将会更新这个activity来显示定制的内容,所以如果你使用不同的IDE也不要担心这个app编译不过。

接收Intent


每个 Activity都被一个Intent 调用, 不管用户如何操作。你可以在启动activity的时候通过调用getIntent()获得Intent ,然后查询里面的数据。

DisplayMessageActivity 类的onCreate()方法里面,,获取intent然后抽取出MainActivity传过来的信息

[html] view plain copy

 
  1. Intent intent = getIntent();  
  2. String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);  

截图如下

activity启动另一个activity_课程开发的四个步骤

显示信息


为了在屏幕上现世信息,创建一个 TextView 窗体并且使用setText()设置文本。 然后添加TextView ,并且通过将其传递给setContentView()使其作为当前activity布局的t根视图。

DisplayMessageActivity的完整的onCreate()方法如下所示:

[html] view plain copy

 
  1. @Override  
  2. public void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.   
  5.     // Get the message from the intent  
  6.     Intent intent = getIntent();  
  7.     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);  
  8.   
  9.     // Create the text view  
  10.     TextView textView = new TextView(this);  
  11.     textView.setTextSize(40);  
  12.     textView.setText(message);  
  13.   
  14.     // Set the text view as the activity layout  
  15.     setContentView(textView);  
  16. }  

截图如下:

activity启动另一个activity_课程开发的四个步骤

现在你可以运行这个app了。当它打开的时候,在本文编辑框中输入信息,然后点击发送,你就可以看到信息显示在第二个activity中。

activity启动另一个activity_课程开发的四个步骤

Figure 2. Both activities in the final app, runningon Android 4.0.

就是他,你已经建立了你的一个Android app了!

想学习更多的Android app编程,请继续学习接下来的基础训练课程。下一个课程是管理Activity的生命周期。

今天的文章activity启动另一个activity_课程开发的四个步骤分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/48109.html

(0)
编程小号编程小号
上一篇 2023-09-04 11:11
下一篇 2023-09-04

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注