【按住你的心】——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传过来的值,这样我们就完成了一个切屏传值的操作。

posted @ 2012-05-26 17:26  Laughing_Vzr@Stand By  阅读(2934)  评论(0编辑  收藏  举报