2013年11月4日 星期一

Intent 用法 (一)

當一個 APP 有二個、三個、甚至更多
這時也不可能把程式碼全部寫在同一個Activity裡
所以都會把它寫成許許多多個Activity使用 Intent 方法來達成所需的功能。

方法 一
A Activity 開啟 B Activity方式
先做出 A Activity 程式碼如下:
a_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is Activity A"
        />
    
    <Button 
        android:id="@+id/a_layout_bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go"
        />

</LinearLayout>

A_Activity.java

package com.example.testintent;

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

public class A_Activity extends Activity {
 
 private Button bt;
 private TextView tv;
 
 private OnClickListener click = new OnClickListener() {
  @Override
  public void onClick(View v) {
                        //定義一個 物件 Intent
   Intent i = new Intent();
                        //setClass( 目前的class  , 要開啟的class );
   i.setClass(A_Activity.this,B_Activity.class);
                        //執行
   startActivity(i);
  }
 };

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.a_layout);
  
  bt = (Button)findViewById(R.id.a_layout_bt);
  bt.setOnClickListener(click);
  
  tv = (TextView)findViewById(R.id.a_layout_tv);
  
 }

}

開始建立第二個 B Activity
在 專案底下 src -> package -> 右鍵 ->new -> class
new 一個 Class 時需注意 因為是要做出另一個Activity
在Superclass: 填入 Activity   (不能打錯字)
執行 Finish
完成後會發現 會有錯誤訊息
只要import就ok了(ctrl + shift + o)
又會發現並沒有 protected void onCreate(Bundle savedInstanceState)
只要在class裡面 右鍵->source->Override/Implement Methods...
找到onCreate(savedInstanceState)按ok即可
以下的動作為最為重要
打開AndroidManifest.xml 選到 Application -> Add
選擇 Activity
在Name 這行 點選 Browse...
選擇新增的 B Class

開始佈局 B Activity
res底下的layout按右鍵 ->new ->Other...


b_layout.xml

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is Activity B"
        />


</LinearLayout>
B_Activity.java
package com.example.testintent;

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

public class B_Activity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.b_layout);
  
 }
 
}

經過編譯後 就能執行 A 開啟 B的功能了
附上SourceCode
整個的重點就只是在於
Intent i = new Intent();
i.setClass(A_Activity.this,B_Activity.class);
startActivity(i);
這三行

沒有留言:

張貼留言