第一个android程序,Activity小实例

本实例有3个界面(Activity)。activity_main界面有两个按钮,Button1和Button2。Button1单击后会跳转到activityb,Button2单击后会跳转到activityc。activityc有一个输入框和一个“确定”按钮,单击“确定”按钮将关闭activityc,并将输入框中的内容回传到activity_main中。activity_main获取到activityc的回传数据后,将其内容显示在Button2的下方。各界面的布局效果如下:

  

  

编程实现

1、新建一个android项目(过程省略),新建的项目中默认会自动创建activity_main界面及对应的MainActivity.java,我们只需要再添加activityb和activityc界面即可。在layout目录下添加activityb.xml和activityc.xml文件,在src目录下添加ActivityB.java和ActivityC.java文件。添加后,此项目工程目录如下:

 2、编辑activity_main.xml,添加两个按钮和一个TextView,完成后内容大致如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/buttona1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttona1_text" />

    <Button
        android:id="@+id/buttona2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttona2_text" />

    <TextView
        android:id="@+id/tvDisplay"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

3、编辑activityb.xml,添加一个TextView,完成后内容大致如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tvActivityb"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/activityb_tv_text" />

</LinearLayout>

4、编辑activityc.xml,添加一个EditText和一个按钮,完成后内容大致如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/etActivityc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/buttonc1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttonc1_text" />

</LinearLayout>

 5、编辑MainActivity.java。MainActivity.java中定义了类MainActivity。MainActivity继承自Activity,以activity_main.xml定义的界面为显示界面。请注意代码中启动其它Activity的方式。如果想从启动的其它Activity中获取返回信息,使用startActivityForResult,否者使用startActivity。使用startActivityForResult启动的Activity调用setResult时onActivityResult方法会被调用,所以为了获取返回信息就需要重新实现onActivityResult方法。

startActivityForResult有两个参数,第一个是Intent对象,第二个为请求码,用于区分不同的请求。例如,通过startActivityForResult启动了多个Activity,当这些Activity调用setResult时onActivityResult都会被调用,那在onActivityResult中如何区分返回信息来自哪个Activity呢?这时就可以通过请求码来区分。Activity关闭时,相关请求码会传入onActivityResult方法中,所以在处理时可以根据请求码区分不同Activity的返回信息。MainActivity.java内容如下:

package com.helloworld.helloworldproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.content.Intent; 
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //取得activity main中的两个button
        Button buttona1 = (Button)findViewById(R.id.buttona1);
        Button buttona2 = (Button)findViewById(R.id.buttona2);
        
        //为buttona1绑定单击事件
        buttona1.setOnClickListener(new buttona1_Listener());
        buttona2.setOnClickListener(new buttona2_Listener());
    }
    
    //buttona1单击事件处理类
    private class buttona1_Listener implements View.OnClickListener
    {
        public void onClick(View v)
        {
            //TODO Auto-generated method stub
            //使用intent启动ActivityB
            Intent _intent = new Intent(MainActivity.this, ActivityB.class);
            startActivity(_intent);
        }
    }
    
    //buttona2单击事件处理类
    private class buttona2_Listener implements View.OnClickListener
    {
        public void onClick(View v)
        {
            //TODO Auto-generated method stub
            //使用intent启动ActivityC
            Intent _intent = new Intent(MainActivity.this, ActivityC.class);
            startActivityForResult(_intent, 100);
        }
    }
    //通过setContentView启动的Activity返回时,此方法被调用
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == 100 && resultCode == Activity.RESULT_OK)
        {
            String val = data.getExtras().getString("helloworld");
            TextView textView = (TextView)findViewById(R.id.tvDisplay);
            textView.setText("来自ActivityC的值: "+val);
        }
    }
}

  6、编辑ActivityB.java。ActivityB.java中定义了类ActivityB。ActivityB继承自Activity,以activityb.xml定义的界面为显示界面。ActivityB.java内容如下:

package com.helloworld.helloworldproject;

import android.app.Activity;
import android.os.Bundle;

public class ActivityB extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityb);
    }
}

  7、编辑ActivityC.java。ActivityC.java中定义了类ActivityC。ActivityC继承自Activity,以activityc.xml定义的界面为显示界面。ActivityC.java内容如下:

package com.helloworld.helloworldproject;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class ActivityC extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityc);
        Button buttonc1 = (Button)findViewById(R.id.buttonc1);
        buttonc1.setOnClickListener(new buttonc1_Listener());
    }
    
    private class buttonc1_Listener implements View.OnClickListener
    {
        public void onClick(View v)
        {
            Intent data = new Intent();
            EditText editText = (EditText)findViewById(R.id.etActivityc);
            String val = editText.getText().toString();
            //将键值对存入Intent的对象
            data.putExtra("helloworld", val);
            //将Intent对象传回父Activity
            setResult(Activity.RESULT_OK, data);
            //关闭当前Activity
            finish();
        }
    }
}

8、在AndroidManifest.xml中注册Activity。这是最容易被忽视的一步,需要注意。在AndroidManifest.xml添加以下代码:

        <activity android:name="com.helloworld.helloworldproject.ActivityB"></activity>
        <activity android:name="com.helloworld.helloworldproject.ActivityC"></activity>

 

posted @ 2014-12-24 14:54  鞋匠  阅读(419)  评论(0编辑  收藏  举报