关于Activity之间的切换及易导致出错的问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Activity之间的切换
在两个Activity中进行切换,不外乎每组Activity定义一个布局类.xml,比如main.xml、secondlayout.xml,还有一个实现程序.java,比如MainActivity、SecondActivity等。
切换不同的Activity,用到的是Intent对象。
使用方式如下:
public void onClick(View v) {
/** new 一个Intent对象,并指定要Intent的class */
Intent intent = new Intent();
intent.setClass(CallActivity.this, SecondActivity.class);
/* 调用一个新的Activity */
startActivity(intent);
/* 关闭原来的 Activity */
CallActivityActivity.this.finish();
}
从程序中我们可以看到,这里面涉及到的就是Intent对象的操作,在Intent实例中,我们要执行setClass方法,方法中用到两个参数,第一个是当前的类class,第二个参数是要切换到的那个Activity对象类,这里第一个是CallActivity.this,第二个是SecondActivity.class。
最后就是启动要调出的Activity对应的intent实例,并关闭当前的Activity。
表面看,以上这些语句和函数设置完了就可以了,其实不然,还必须把第二个要调入的Activity名添加到AndroidManifest.xml中,否则一旦执行到startActivity(intent)语句就会出现系统强制中断的出错。
下面红色部分就是新添加进入AndroidManifest.xml 中的第二个Activity名
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="/apk/res/android"
package="control.example.CallActivity"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:label="@string/app_name"
android:name=".CallActivityActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category
android:name="UNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity" ></activity>
</application>
</manifest>
图1 第一个Activity
图2 第二个Activity
下面是完整的程序,涉及到7个文件,其中,AndroidManifest.xml是定义在主目录下的配置文件,color.xml和strings.xml是定义在values目录下的两个参数文件,main.xml和secondlayout.xml是定义在layout目录下的两个Activity的布局文件,CallActivityActivity.java 和SecondActivity.java分别是两个Activity的实现文件。
AndroidManifest.xml文件:
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="/apk/res/android"
package="control.example.CallActivity"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:label="@string/app_name"
android:name=".CallActivityActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category
android:name="UNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity"></activity>
</application>
</manifest>
color.xml文件:
<?xml version="1.0"encoding="utf-8"?>
<resources>
<color name="black">#000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
strings.xml文件
<?xml version="1.0"encoding="utf-8"?>
<resources>
<string name="hello">Hello World, CallActivityActivity!</string> <string name="app_name">CallActivity</string>
<string name="act1">this is Activity 1</string>
<string name="act2">this is Activity 2</string>
</resources>
main.xml文件:
<?xml version="1.0"encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black"><!-- 到color.xml文件中去找变量black -->
<TextView
android:id="@+id/text1"
android:textSize="23sp"
android:layout_width="286px"
android:layout_height="49px"
android:layout_x="70px"
android:layout_y="32px"
android:text="@string/act1"/>
<Button
android:id="@+id/button1"
android:layout_width="118px"
android:layout_height="wrap_content"
android:layout_x="100px"
android:layout_y="82px"
android:text="Go to Activity2"/>
</AbsoluteLayout>
Secondlayout.xml文件:
<?xml version="1.0"encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white">
<TextView
android:id="@+id/text2"
android:textSize="24sp"
android:layout_width="286px"
android:layout_height="49px"
android:layout_x="70px"
android:layout_y="32px"
android:textColor="@color/black"
android:text="@string/act2">
</TextView>
<Button
android:id="@+id/button2"
android:layout_width="118px"
android:layout_height="wrap_content"
android:layout_x="100px"
android:layout_y="82px"
android:text="Go to Activity1">
</Button>
</AbsoluteLayout>
CallActivityActivity.java文件:
package control.example.CallActivity;
import android.app.Activity;
import .Uri;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
public class CallActivityActivity extends Activity { /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(yout.main);
Button b1 = (Button)findViewById(R.id.button1);
b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) {
/** new 一个Intent对象,并指定要Intent的class */
Intent intent = new Intent();
intent.setClass(CallActivityActivity.this, SecondActivity.class);
/* 调用一个新的Activity */
startActivity(intent);
/* 关闭原来的 Activity */
CallActivityActivity.this.finish();
}
});
}
}
SecondActivity文件:
package control.example.CallActivity;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
public class SecondActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.secondlayout);
Button b2 = (Button)findViewById(R.id.button2);
b2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
/** new 一个Intent对象,并指定要Intent的class */
Intent intent = new Intent();
intent.setClass(SecondActivity.this, CallActivityActivity.class);
/* 调用一个新的Activity */
startActivity(intent);
/* 关闭原来的Activity */
SecondActivity.this.finish();
}
});
}
}。