当前位置: 代码迷 >> Android >> 您的第一个android应用-(4)创建另一个活动
  详细解决方案

您的第一个android应用-(4)创建另一个活动

热度:42   发布时间:2016-04-28 02:07:27.0
你的第一个android应用----(4)创建另一个活动

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?创建另一个活动

? ? 通过学习前面的课程,你创建了带有有一个活动页面的应用,活动中包含一个文本输入框和一个按钮.这节课程,我们将实现

? ? 当用户点击"Send"按钮时,打开一个新的活动.

?

? ? 一.响应Send按钮

? ? ? ? 1.打开/res/layout文件夹下的activity_my.xml文件.

? ? ? ? 2.在"<Button>"元素中添加"android:onClick"属性.

? ? ? ? ? res/layout/activity_my.xml

?

      <Button              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:text="@string/button_send"              android:onClick="sendMessage" />
?

?

? ? ? ? "android:onClick"属性的值为"sendMessage",它是活动的一个方法名,当用户点击按钮时,系统会调用这个方法.

? ? ? ? 3.打开java/com.mycompany.myfirstapp文件夹下的MyActivity.java文件

? ? ? ? 4.在MyActivity类中,添加"sendMessage()"方法,如下:

? ? ? ? ? java/com.mycompany.myfirstapp/MyActivity.java

?

/** Called when the user clicks the Send button */public void sendMessage(View view) {     // Do something in response to button}
?

?

? ? ? ? 为了使系统能匹配该方法和"android:onClick"指定的名称,方法必须满足一下条件:

? ? ? ? ? ? * 权限必须为"public".

? ? ? ? ? ? * 没有返回值.

? ? ? ? ? ? * 有且只有一个参数"View".

?

? ? ? ? 接下来,你将在该方法中读取文本内容并将内容传递给另一个活动.

?

? ? 二.创建Intent对象

? ? ? ? 1.在"sendMessage()"方法中创建一个"Intent"对象来开启"DisplayMessageActivity"活动,如下:

? ? ? ? ? ?java/com.mycompany.myfirstapp/MyActivity.java

?

public void sendMessage(View view) {       Intent intent = new Intent(this, DisplayMessageActivity.class);}
?

?

? ? ? ? ? ?备注:引用"DisplayMessageActivity",IDE(如Android Studio)会提示一个错误,因为目前这个类并不存在,

? ? ? ? ? ? ? ?暂时不用管它,我们马上就会创建的.

?

? ? ? ? ? ?这里使用的"Intent"构造函数接收两个参数:

? ? ? ? ? ? ? ?* 第一个参数是"Context"类型("Activity"类是"Context"类的子类).

? ? ? ? ? ? ? ?* 第二个参数是"Class"类型,系统用于传递信息的类(在这里是即将被打开的活动类).

?

? ? ? ? ? ?这里Android Studio会提示你导入"Intent"类.

? ? ? ? 2.在文件顶部导入"Intent"类:

? ? ? ? ? java/com.mycompany.myfirstapp/MyActivity.java

?

 import android.content.Intent
?

?

? ? ? ? ? 提示:在Android Studio,使用Alt+Enter组合键,IDE将会自动导入需要的类.

? ? ? ? 3.在"sendMessage()"方法中,使用"findViewById()"方法来获取"EditText"元素.

? ? ? ? ? ?java/com.mycompany.myfirstapp/MyActivity.java

?

public void sendMessage(View view) {       Intent intent = new Intent(this, DisplayMessageActivity.class);       EditText editText = (EditText) findViewById(R.id.edit_message);}
?

?

? ? ? ? 4.导入"EditText"类.

? ? ? ? 5.获取文本内容并赋值给变量"message",使用"putExtra()"方法将文本内容添加到"intent"对象.

? ? ? ? ? java/com.mycompany.myfirstapp/MyActivity.java

?

public void sendMessage(View view) {       Intent intent = new Intent(this, DisplayMessageActivity.class);       EditText editText = (EditText) findViewById(R.id.edit_message);       String message = editText.getText().toString();       intent.putExtra(EXTRA_MESSAGE, message);}
?

?

? ? ? ? ? "Intent"会把"extra"的数据以"键值对"的形式保存."putExtra()"方法接收两个参数,第一个为"键",

? ? ? ? ? 第二个为"值".

? ? ? ? 6.在"MyActivity"类的顶部,定义常量"EXTRA_MESSAGE",如下:

? ? ? ? ? java/com.mycompany.myfirstapp/MyActivity.java

?

public class MyActivity extends ActionBarActivity {       public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE";       ...}
?

?

? ? ? ? ? 为了使另外的活动能访问这个数据,你需要定义一个公开的常量保存数据.使用你的包名作为这个常量的前缀是一种

? ? ? ? ? 很好的实践.当你的程序同其他程序交互时,这能确保值的唯一性.

? ? ? ? 7.在"sendMessage()"方法中,调用"startActivity()"方法,参数为步骤1创建的"Intent"对象.

?

? ? ? ? ? "sendMessage()"方法的完整代码如下:

? ? ? ? ? java/com.mycompany.myfirstapp/MyActivity.java

?

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

?

? ? ? ? ? 当该方法被调用时,系统会创建一个在"Intent"中定义的"Activity"的实例.为了使程序能正确运行,接下来我们

? ? ? ? ? 创建"DisplayMessageActivity"类.

?

? ? 三.创建显示信息的活动类

? ? ? ? 所有"Activity"类的子类都必须实现"onCreate()"方法.这个方法接收"intent"对象来使用信息.这个方法还必须

? ? ? ? 使用"setContentView()"方法来定义活动的布局.活动的各种组件也在这里被初始化.

?

? ? ? ? 一(1).使用Android Studio创建一个"activity"

? ? ? ? ? ? 当你创建一个新的活动时,Android Studio会弹出一个窗口,如图:

? ? ? ? ? ? 1.选中"java"文件夹下的"com.mycompany.myfirstapp"包,右键选择New > Activity > Blank Activity.

? ? ? ? ? ? 2.在窗口中填写要创建的活动的详细信息.如下:

? ? ? ? ? ? ? * Activity Name:DisplayMessageActivity

? ? ? ? ? ? ? * Layout Name:activity_display_message

? ? ? ? ? ? ? * Title:My Message

? ? ? ? ? ? ? * Hierarchical Parent:com.mycompany.myfirstapp.MyActivity

? ? ? ? ? ? ? * Package name:com.mycompany.myfirstapp

?

? ? ? ? ? ? ? 单击"Finish".

? ? ? ? ? ? 3.打开"displayMessageActivity.java"文件.

? ? ? ? ? ? ? 这个类已经实现了"onCreate()"方法.同时也实现了"onOptionsItemSelected()"方法,该方法用于监听

? ? ? ? ? ? ? 操作栏的弹起事件.暂时保持这两个方法不变.

? ? ? ? ? ? 4.删除"onCreateOptionsMenu()"方法.在这个应用中我们用不到.

?

? ? ? ? ? ? ? 如果你使用Android Studio开发,你现在可以运行程序,但是不会有太大的变化.点击"Send"按钮会打开

? ? ? ? ? ? ? 第二个活动,它显示模板提供的默认布局和信息"Hello World".接下来我们将学习如何给这个活动自定义布局和内容.

?

? ? ? ? 一(2).不使用Android Studio创建活动

? ? ? ? ? ? 如果你使用其他IDE或者命令行,可以按如下方式创建活动:

?

? ? ? ? ? ? 1.在"MyActivity.java"文件所在的路径"src/"下创建一个"DisplayMessageActivity.java"文件.

? ? ? ? ? ? 2.在"DisplayMessageActivity.java"文件中添加如下代码:

? ? ? ? ? ? ? ?

 public class DisplayMessageActivity extends ActionBarActivity {         @Override        protected void onCreate(Bundle savedInstanceState) {                  super.onCreate(savedInstanceState);                  setContentView(R.layout.activity_display_message);                   if (savedInstanceState == null) {                         getSupportFragmentManager().beginTransaction()                                .add(R.id.container, new PlaceholderFragment()).commit();                  }        }         @Override        public boolean onOptionsItemSelected(MenuItem item) {               // Handle action bar item clicks here. The action bar will               // automatically handle clicks on the Home/Up button, so long               // as you specify a parent activity in AndroidManifest.xml.               int id = item.getItemId();               if (id == R.id.action_settings) {                      return true;               }               return super.onOptionsItemSelected(item);         }          /**          * A placeholder fragment containing a simple view.          */         public static class PlaceholderFragment extends Fragment {                 public PlaceholderFragment() { }                 @Override                public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {                       View rootView = inflater.inflate(R.layout.fragment_display_message,container, false);                       return rootView;                }         }}

?

? ? ? ? ? ? ? ? 备注:如果你使用的IDE不是Android Studio,你的项目将不会包含"setContentView()"方法所需要的

? ? ? ? ? ? ? ? ? ? "activity_display_message"布局,不过没关系,因为我们不会使用这个布局,而且我们会在后面

? ? ? ? ? ? ? ? ? ? 更新这个方法.

? ? ? ? ? ? 3.在"strings.xml"文件中添加新活动标题如下:

? ? ? ? ? ? ? ??

<resources>        ...        <string name="title_activity_display_message">My Message</string></resources>

?

? ? ? ? ? ? 4.在"AndroidManifest.xml"文件的"Application"元素中,添加"<activity>"子元素,如下:

? ? ? ? ? ? ? ?

 <application ... >        ...        <activity             android:name="com.mycompany.myfirstapp.DisplayMessageActivity"             android:label="@string/title_activity_display_message"             android:parentActivityName="com.mycompany.myfirstapp.MyActivity" >             <meta-data                    android:name="android.support.PARENT_ACTIVITY"                    android:value="com.mycompany.myfirstapp.MyActivity" />        </activity></application>

?

? ? ? ? ? ? ? ? "android:parentActivityName"属性用于声明本活动在应用罗辑层级结构中父活动的名称.系统使用

? ? ? ? ? ? ? ? 这个值来实现默认的导航行为,例如在Android4.1(API level16)或更高版本中的向上导航.你也可以

? ? ? ? ? ? ? ? 使用支持库(Support Library)和添加这里所使用的"<meta-data>"元素来为旧版本提供相同的导航行为.

?

? ? ? ? ? ? ? ? 备注:你的Android SDK应该已经包含了最新的Android支持库(在你添加SDK安装包时包含的).使用

? ? ? ? ? ? ? ? ? ? Android Studio中提供的模板时,支持库会自动添加到你的应用中(你可以在"Android

? ? ? ? ? ? ? ? ? ? Dependencies"下查看这些库的JAR包文件).如果你没有使用Android Studio,那么你需要手动

? ? ? ? ? ? ? ? ? ? 将这些支持JAR包添加到你的工程中.

?

? ? ? ? 二.接收Intent对象

? ? ? ? ? ? 任何一个Activity对象都是由一个Intent对象调用的,不管用户是如何导航到这个活动对象的.你可以使用"getIntent()"

? ? ? ? ? ? 方法来获取指定的Intent对象,通过Intent对象可以开启你指定的活动和获取你指定的数据.

?

? ? ? ? ? ? 1.打开java/com.mycompany.myfirstapp路径下的"DisplayMessageActivity.java"文件.

? ? ? ? ? ? 2.从"onCreate()"方法中删除如下代码:

? ? ? ? ? ? ? ?

 setContentView(R.layout.activity_display_message);

?

? ? ? ? ? ? 3.获取Intent对象.

? ? ? ? ? ? ? ?

 Intent intent = getIntent();

?

? ? ? ? ? ? 4.导入Intent类(Android Studio快捷为:Alt+Enter).

? ? ? ? ? ? 5.通过"getStringExtra()"方法获取"MyActivity"对象传递的信息.

? ? ? ? ? ? ? ??

String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

?

?

? ? ? ? 三.显示信息

? ? ? ? ? ? 1.在"onCreate()"方法中,创建一个"TextView"对象

? ? ? ? ? ? ? ??

TextView textView = new TextView(this);

?

? ? ? ? ? ? 2.设置信息的大小和内容.

? ? ? ? ? ? ? ??

textView.setTextSize(40);textView.setText(message);

?

? ? ? ? ? ? 3.将这个TextView对象传递给"setContentView()"方法,作为这个活动布局的根视图.

? ? ? ? ? ? ? ??

setContentView(textView);

?

? ? ? ? ? ? 4.导入TextView.

?

? ? ? ? ? ? ? ? "DisplayMessageActivity"类的"onCreate()"方法最终如下:

?

 @Override public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         // Get the message from the intent        Intent intent = getIntent();        String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);         // Create the text view        TextView textView = new TextView(this);        textView.setTextSize(40);        textView.setText(message);         // Set the text view as the activity layout        setContentView(textView);}

?

? ? ? ? ? ? ? ? 运行程序,在输入框中输入信息,然后单击按钮"Send",输入的信息将会在另一个活动页面上显示.如图:

? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? 到这里我们的第一个简单android应用就完成了.

  相关解决方案