今天的笔记我们学习下通过Button切换Activity的操作,也就是相当与切屏的操作。
首先,除了项目创建时的Activity我们要再建一个Activity,一个Activity就相当于一屏;这里创建新的Activity要记得在AndroidMainfest.xml中进行注册,然而创建一个新的Activity自然要有该屏的布局XML文件,源码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/mt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
这里除了为TextView添加一个ID外,其它操作同main.xml文件类似,我们把它命名为other.xml。
下面我们看对应的Activity源码:
public class OActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
// 通过ID获取TextView对象
TextView mt = (TextView) findViewById(R.id.mt);
// 接收前一屏穿过来的Intent
Intent intent = getIntent();
// 取其中的值
String value = intent.getStringExtra("param_str");
// 将值设置到TextView中显示
mt.setText(value);
}
}
这里的Intent需要注意一下,它的用法就是在触发前的屏幕设置好要传向哪个屏幕也就是哪个Activity,具体要传什么东西,都可以在Intent中设置,下面我们看触发事件的主屏的main.xml文件,源码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/mb"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/act"
/>
</LinearLayout>
这里的TextView为系统创建项目时所创建,也可以删除掉。
主Activity的源码:
public class Activity01Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button mb = (Button) findViewById(R.id.mb);
//给按钮注册监听
mb.setOnClickListener(new MbListener());
}
/**
* 第二种方法实现按钮触发其他Activity并且进行传值
* */
class MbListener implements View.OnClickListener {
public void onClick(View v) {
/* 此处调用另一个Activity */
Intent intent = new Intent();
intent.putExtra("param_str", "Info from 01");
// 向另一个Activity传递<name,value>,value采用string的格式,也可以是其他
intent.setClass(Activity01Activity.this, OActivity.class);
// 指出是哪个Activity,setClass(对象,类),对于嵌套类,为了提供良好的阅读方式并避免奇异,我们都指明是哪个类
Activity01Activity.this.startActivity(intent);
// 启动另外的Activity,作为View的方法,可以直接使用startActivity,由于嵌套类,这样些可以清晰一些。
}
}
}
在这里我们使用了之前学习到的Button触发时间的第二种方法进行的事件触发。
在这里忘了说一下Activity在AndroidMainfest.xml文件中的注册,首先我们看源码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.v.Activity01"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Activity01Activity"
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 -->
<activity android:name=".OActivity" android:label="@string/other"/>
</application>
</manifest>
注释的下一行是我们新注册的Activity,去掉这一行之外的部分为我们创建项目的时候,Eclipse自动创建,其中添加有:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这个标签的Activity为程序开始运行时所运行的Activity,里面的两个标签分别是制定了主启动和启动类型。
在我们新注册的Activity当中:
android:name=".OActivity"
“.”点后的为对应所创建的新Activity类名,大小写要一致;
android:label="@string/other"
label属性是设置该屏顶部显示的标签文字,这个我们可以在string.xml文件中自行设置,这里不再贴码举例。
下面我们看最终的运行结果:
1.初始化状态:
2.点击按钮切屏后状态:
我们在第二屏看到了从第一屏通过Intent传过来的值,这样我们就完成了一个切屏传值的操作。