第八章:Android中Intent的用法及注意事项

来源:互联网 发布:隐形眼镜推荐 知乎 编辑:程序博客网 时间:2024/06/16 01:22

我们今天就借助一个例子,来谈谈Intent的用发及注意事项。

我们今天的目标就是实现从一个Activity跳转到另外一个Activity,实现一个Activity含参跳转到另外一个Activity,实现一个工程的Activity跳转到其他工程的Activity。

下面我们先说一下核心代码

Intent跳转:

Intent intent = new Intent();intent.setClass(MainActivity.this, SumActivity.class);
<pre name="code" class="java">MainActivity.this.startActivity(intent);


Intent含参跳转:

Intent intent = new Intent();intent.putExtra(name, value);intent.setClass(MainActivity.this, SumActivity.class);MainActivity.this.startActivity(intent);

下面我们看一个实例

这个实例那就是在第一个Activity输入两个数,这两个数可以进行加减乘除的运算,然后把结果传递给下一个Activity,下一个Activity有一个Button,点击后可以回到第一个Activity,第二个Activity再定义一个Button,点击之后可以跳转到Android的发短信的Activity,可以实现发短信的活动,这就是我的思路,下面我们就来看下具体实现方法,我的所有点击事件用的都是匿名内部类,需要Java有一定的基础。

首先我们先创建工程SimpleCalc03,包名是一个Android项目的唯一标识,并且包名一般都是域名,公司名,项目名来命名,我这里定义包名为cn.edu.hpu.acm.simplecalc03.
工程创建好,就有一个默认的MainActivity(我这里是),由于我们需要从一个Activity跳转到另外一个Activity,所以我们需要再创建一个Activity,点击Android唯一标识,new/Other,找到AndroidActivity,建立OtherActivity,自动生成android_other.xml文件。

我们先打开String.xml文件,在里面定义需要使用到的汉字。
代码如下:
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?><resources>    <span style="white-space:pre"></span><string name="app_name">简单计算器</string>    <span style="white-space:pre"></span><string name="action_settings">Settings</string>    <span style="white-space:pre"></span><string name="hello_world">Hello world!</string>    <span style="white-space:pre"></span><string name="title_activity_other">OtherActivity</string><string name="firstTextView">请输入第一个数</string><string name="secondTextView">请输入第二个数</string><string name="sum">加法</string><string name="sub">减法</string><string name="mul">乘法</string><string name="div">除法</string><string name="resultTextView">计算结果为</string><string name="back">返回</string><string name="exit">退出</string><string name="about">关于</string><string name="sms">发短信</string></resources>

这些就是我们一会需要用到的一些汉字,在Android中,所有的汉字,注意是所有的,都要写到string.xml文件中,这样可以实现我们程序的国际化,注意,程序国际化。有些时候,甚至可以吧所有的颜色定义比如红色(#FF0000)都定义string.xml文件中,这些是国际化程序的统一标准。

string.xml写好后,我们首先要实验布局,这里采用整体垂直线性布局,局部水平线性布局。

首先我们需要实现activity_main.xml的布局
代码如下:
<!--定义整体为垂直线性布局,并且宽为充满整个父元素,高为充满整个父元素  --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <!--     定义TextView显示控件,并指定它的Id和显示内容,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <TextView         android:id="@+id/firstTextView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/firstTextView"/>    <!--     定义第一个输入框,并指定它的Id,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <EditText         android:id="@+id/number1"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <!--     定义TextView显示控件,并指定它的Id和显示内容,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <TextView         android:id="@+id/secondTextView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/secondTextView"/>    <!--     定义第二个输入框,并指定它的Id,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <EditText         android:id="@+id/number2"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <!--     定义局部线性布局,定义方向是水平方向,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <LinearLayout         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_gravity="center">       <!--        定义第一个按钮,指定按钮的显示内容,指定它的宽、高,分别为       包裹住它的宽、高,指定它的Id        -->        <Button             android:id="@+id/sum"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/sum"/>        <!--        定义第二个按钮,指定按钮的显示内容,指定它的宽、高,分别为       包裹住它的宽、高,指定它的Id        -->        <Button             android:id="@+id/sub"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/sub"/>        <!--        定义第三个按钮,指定按钮的显示内容,指定它的宽、高,分别为       包裹住它的宽、高,指定它的Id        -->        <Button             android:id="@+id/mul"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/mul"/>        <!--        定义第四个按钮,指定按钮的显示内容,指定它的宽、高,分别为       包裹住它的宽、高,指定它的Id        -->        <Button             android:id="@+id/div"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="@string/div"/>    </LinearLayout></LinearLayout>

如此,MainActivity的布局文件就写好了,下面我们看一下效果:

这就是MainActivity布局文件生成的效果,

下面我们再为OtherActivity定义布局文件
activity_other.xml的代码如下:
<!-- 定义整体为垂直线性布局,并且宽为充满整个父元素,高为充满整个父元素  --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <!--     定义TextView显示控件,并指定显示内容,指定它的宽为充满父元素,    高为包裹住元素内容     -->    <TextView         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/resultTextView"/>    <!--     定义TextView显示控件,指定其Id,并指定它的宽为充满父元素,    高为包裹住元素内容     -->    <TextView         android:id="@+id/result"        android:layout_width="match_parent"        android:layout_height="wrap_content"/>    <!--     定义返回按钮,点击可以再次跳转到MainActivity     -->    <Button         android:id="@+id/back"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/back"/>    <!--     定义按钮,点击可以跳转到Android自带发短信Activity     -->    <Button         android:id="@+id/sms"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/sms"/></LinearLayout>

下面我们为MainActivity.java定义点击事件及一些方法,
代码如下:
package cn.edu.hpu.acm.simplecalc03;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {//声明所需变量private EditText number1;private EditText number2;private Button sum;private Button sub;private Button mul;private Button div;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //通过Id得到4个按钮的值        sum = (Button) findViewById(R.id.sum);        sub = (Button) findViewById(R.id.sub);        mul = (Button) findViewById(R.id.mul);        div = (Button) findViewById(R.id.div);        //用匿名内部类为sum按钮添加点击事件        sum.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = sum() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}});      //用匿名内部类为sub按钮添加点击事件        sub.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = sub() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}});      //用匿名内部类为mul按钮添加点击事件        mul.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = mul() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}});      //用匿名内部类为div按钮添加点击事件        div.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString result = div() + "";Intent intent = new Intent();intent.putExtra("result", result);intent.setClass(MainActivity.this, OtherActivity.class);MainActivity.this.startActivity(intent);}});    }    //定义get方法得到一个值,并转换为float类型    public float getNumber1(){    number1 = (EditText) findViewById(R.id.number1);    String firstStr = number1.getText().toString();    return Float.parseFloat(firstStr);    }    //定义get方法得到第二个值,并转换为float类型    public float getNumber2(){    number2 = (EditText) findViewById(R.id.number2);    String secondStr = number2.getText().toString();    return Float.parseFloat(secondStr);    }    //定义加法运算    public float sum(){    return getNumber1()+getNumber2();    }    //定义减法运算    public float sub(){    return getNumber1()-getNumber2();    }    //定义乘法运算    public float mul(){    return getNumber1()*getNumber2();    }    //定义除法运算    public float div(){    if(getNumber2()==0){    return 0;    }else{    return getNumber1()/getNumber2();    }    }        //覆写onCreateOptionsMenu方法,定义菜单选项    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.    //覆写add()方法,其中第一个参数设置为0,第二个参数为Id,第三个参数为显示位置    //第四个参数为显示内容,这里通过R.string.*找到        menu.add(0, 1, 1, R.string.exit);        menu.add(0, 2, 2, R.string.about);        return super.onCreateOptionsMenu(menu);    }    //覆写onOptionsItemSelected方法,@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stub//如果Id==1(1为前面设置的退出菜单的按钮Id)调用finish();方法退出程序if(item.getItemId()==1){finish();}return super.onOptionsItemSelected(item);}    }

然后我们写OtherActivity.java的方法,

代码如下:

package cn.edu.hpu.acm.simplecalc03;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class OtherActivity extends Activity {//声明属性private TextView result;private Button back;private Button sms;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_other);//通过Id得到值result = (TextView) findViewById(R.id.result);back = (Button) findViewById(R.id.back);sms = (Button) findViewById(R.id.sms);//实例化Intent对象Intent intent = getIntent();//得到从MainActivity传过来的值String value = intent.getStringExtra("result");//设置TextView显示文本的值(就是布局文件第二个TextView,没有设置显示内容的那个)result.setText(value);//为back按钮定义点击事件back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//实例化Intent对象Intent intent = new Intent();//定义从当前Activity,跳转到需要跳转到的Activity//后缀当前就为.this,需要跳转到的就为.classintent.setClass(OtherActivity.this, MainActivity.class);//开始Activity意图OtherActivity.this.startActivity(intent);}});sms.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//接受者的手机号,smsto:是uri的识别头部Uri uri = Uri.parse("smsto://0800000123");Intent intent = new Intent(Intent.ACTION_SENDTO, uri);//第二个参数就是将要发送的信息内容intent.putExtra("sms_body", "The SMS Text");startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.other, menu);return true;}}
如此就完成了从一个Activity到另外一个Activity的传值和非传值的跳转,以及从一个app的Activity到另外一个app的Activity的跳转。

由于我是用的真机测试,所以无法弄到测试截图,大家可以把代码照搬回去,自己测试一下。

0 0
原创粉丝点击