7.2 Android Basic UI的布局 Intent和Activity

Download Source Code <<ActivityIntentDemo.zip>>

Activity 和 Intent 演示

   

  • 使用startActivity()方法在Activity之间切换
  • 使用Intent.putExtra()Intent.putExtras()方法保存需要传递的数据
  • 使用startActivityForResult()方法在Activity之间传递参数
  • 重载onActivityResult()方法处理回传数据
  • 使用Intent.getExtra()、Intent.getExtras()方法获取传递的数据

       

  • 新建项目ActivityIntentDemo,编辑res/layout/main.xml布局文件

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

    <Button android:text="显示Activity1" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    <Button android:text="显示Activity2" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    </LinearLayout>

       

    添加了两个按钮,当单击按钮的时候切换Activity。

       

    2. 在res/layout添加activity1.xml 和 activity2.xml 布局文件

    activity1.xml

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content" android:layout_height="wrap_content">

       

    <TextView android:text="Activity1" android:id="@+id/TextView01"

    android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

    <Button android:text="Activity1按钮" android:id="@+id/activity1_btn"

    android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>

    </LinearLayout>

    activity2.xml

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <Button android:id="@+id/button4"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:text="这是button4" />

    </LinearLayout>

       

    3. 添加两个类Activity1 和Activity2继承自Activity类,并在onCreate()方法中关联xml布局文件

    import android.app.Activity;

    import android.os.Bundle;

       

    public class Activity1 extends Activity {

       

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity1);

    }

       

    }

       

       

    import android.app.Activity;

    import android.os.Bundle;

       

    public class Activity2 extends Activity {

       

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity2);

    }

       

    }

       

    4. 编辑ActivityIntentDemo类,如下代码:

    public class ActivityIntentDemo extends Activity {

    Button button1;

    Button button2;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    button1 = (Button)findViewById(R.id.Button01);

    button2 = (Button)findViewById(R.id.Button02);

    button1.setOnClickListener(button1_click_listener);

    button2.setOnClickListener(button2_click_listener);

    }

    private Button.OnClickListener button1_click_listener = new Button.OnClickListener(){

       

    @Override

    public void onClick(View v) {

    // TODO Auto-generated method stub

    Intent intent = new Intent();

    intent.setClass(ActivityIntentDemo.this, Activity1.class);

    startActivity(intent);

    }

    };

    private Button.OnClickListener button2_click_listener = new Button.OnClickListener(){

       

    @Override

    public void onClick(View v) {

    // TODO Auto-generated method stub

    Intent intent = new Intent();

    intent.setClass(ActivityIntentDemo.this, Activity2.class);

    startActivity(intent);

    }

    };

    }

    为连个按钮添加单击事件,在单击事件中使用Intent.setClass配置Activity,使用startActivity()方法启动Activity

       

    5. 在AndroidManifest.xml中配置新的Activity

    <activity android:name="Activity1"></activity>

    <activity android:name="Activity2"></activity>

       

    6. 运行程序

       

    在Activity之间传递数据

       

  • 在ActivityIntentDemo类中修改button1的click 事件

       

    private Button.OnClickListener button1_click_listener = new Button.OnClickListener(){

    @Override

    public void onClick(View v) {

    // TODO Auto-generated method stub

    Intent intent = new Intent();

    intent.setClass(ActivityIntentDemo.this, Activity1.class);

    //startActivity(intent);

    //数据传递

    intent.putExtra("Main", "来自ActivityIntentDemo的数据");

    startActivityForResult(intent,REQUEST_CODE);

    }

    };

       

    使用putExtra()方法放置要传递的数据,使用startActivityForResult()方法来启动新的Activity。并且当新的Activity运行结束的时候,还必须执行原Activity里的回凋函数onActivityResult()。

       

    2. 编辑Activity1类在onCreate()方法中修改如下代码:

    protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity1);

    //接收数据

    String data=null;

    Bundle bundle = getIntent().getExtras();

    if(bundle!=null){

    data = bundle.getString("Main");

    setTitle("接受到的数据:"+data);

    }

    //button click listener

    Button btn = (Button)findViewById(R.id.activity1_btn);

    btn.setOnClickListener(new Button.OnClickListener(){

       

    @Override

    public void onClick(View v) {

    //单击按钮返回的数据

    Bundle bundle = new Bundle();

    bundle.putString("store", "数据来自Activity1");

    Intent mIntent = new Intent();

    mIntent.putExtras(bundle);

    setResult(RESULT_OK, mIntent);

    finish();

    }

    });

    }

       

    使用getIntent().getExtras()方法返回接收到的数据。最后是单击按钮调用finish()方法返回到主界面。

       

    3. 在ActivityIntnetDemo类中重载onActivityResult()方法,处理返回的结果数据

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE) {

    if (resultCode == RESULT_CANCELED)

    setTitle("取消");

    else if (resultCode == RESULT_OK) {

    String temp=null;

    Bundle extras = data.getExtras();

    if (extras != null) {

    temp = extras.getString("store");

    }

    setTitle(temp);

    }

    }

    }

       

       

    4. Activity2只是简单的返回

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity2);

    //button click listener

    Button btn = (Button)findViewById(R.id.activity2_btn);

    btn.setOnClickListener(new Button.OnClickListener(){

       

    @Override

    public void onClick(View v) {

    finish();

    }

    });

    }

       

       

       

    Activity1接收到的数据:

       

    当单击按钮后,从Activity1返回的数据。

       

    如果是单击的返回键:

    http://www.cnblogs.com/xingquan

posted @ 2011-03-25 17:02  敏捷学院  阅读(406)  评论(0编辑  收藏  举报