Android中页面跳转分两种情况,一是跳转不带值,还有一个是跳转带值。
先说简单情况,不带值跳转。
假设创建了应用,该应用包含两个类,FirstActivity和SecondActivity。要实现从FirstActivity中启动SecondActivity只需下面两行代码:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
FirstActivity.this. startActivity(intent);
第一行代码创建一个Intent对象,将当前FirstActivity实例的引用和SecondActivity的类实例传递给Intent(Context packageContext,Class<?> cls),构造函数,初始化该对象。
第二行代码将这个Intent对象传递给startActivity(Intent)函数,该函数负责加载SecondActivity.class描述的Activity。
当然要页面跳转,SecondActivity.class中必须有onCreate函数,其中 setContentView(R.layout.activity_second); 必不可少,它的作用是将创建的activity_second.xml弹出。
这里有个问题需要注意,Activity必须在应用的AndroidManifest.xml文件中声明,否则无法启动。声明语言如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="…" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="….FirstActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name = "….SecondActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application> </manifest>
SecondActivity与FirstActivity地位一样。从以上代码中可以看出,FirstActivity与SecondActivity分别通过<intent-filter>标签,与一个Intent过滤器相关联。其中省略号为包名。
下面介绍跳转时传值的情况。
首先得在FirstActivity.class中得到要传递的值,例如我得到如下的值:
EditText account = (EditText) this.findViewById(R.id.accountText);
我们之前创建了Intent对象
intent.putExtra("accountText",account.getText().toString());
这里第一个值是传值是所使用的名称,第二个是要传值的变量名。
我们还可以使用Bundle封装数据
Bundle bundle = new Bundle();
bundle.putString("accountText",account.getText().toString());
intent.putExtras(bundle);
注意以上传值的语句必须在startActivity(intent);之前。
以下是SecondActivity.class的代码
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class SecondActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(new HandWritingImageView(this)); setContentView(R.layout.activity_second); this.showResult(); } private void showResult(){ TextView userNameView = (TextView) this.findViewById(R.id.userNameView); //获取数据 Intent it = this.getIntent(); Bundle bundle = it.getExtras(); String s = bundle.getString("accountText"); userNameView.setText(s); } }
我用Bundle传值的。userNameView是传值的目标。