【按住你的心】——Android开发按钮触发切屏事件的实现
今天的笔记我们学习下通过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,由于嵌套类,这样些可以清晰一些。 } } }
在这里我们使用了之前在http://www.cnblogs.com/H_Razor/archive/2012/05/22/Android04_Vzr_Lou.html中学习到的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传过来的值,这样我们就完成了一个切屏传值的操作。