2016年5月18日 星期三

Android 元件(Intent) 如何實現顯性、隱性的頁面跳轉(一)

Android 元件 Intent

1.顯性應用:

使用介紹:顯性:簡單的頁面跳轉、指定跳轉的頁面,我們稱顯性


關鍵程式碼 :
Intent:意圖
Intent intent = new Intent(現在的位置要去的位置);
startActivity(intent);


我們開始來實現這個功能吧
詳細位置: Layout


重點摘要:
1.我們要先建立2個EmptyActicity,名子分別為Activity1、Activity2
2.EmptyActicity建立後,會自動產生Activity和Layout,成雙成對的
2.在MainActivity中建立2個按鈕,一個點擊後會跳轉到Activity1,另一個則是跳到Activity2
3.分別在Activity1、Activity2中 各建立一個返回的按鈕,跳轉回MainActivity




程式碼:
Layout:activity_main (先新增2個按鈕,可分別跳轉到不同頁面)
</LinearLayout>


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


<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"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:weightSum="1"
   tools:context="com.example.MainActivity">
  
   <Button
       android:id="@+id/bt_Go_Activity_1"
       android:layout_width="200dp"
       android:layout_height="50dp"
       android:layout_gravity="center_vertical"
       android:onClick="onClick"
       android:text="Go_Activity_1" />


   <Button
       android:id="@+id/bt_Go_Activity_2”
       android:layout_width="200dp"
       android:layout_height="50dp"
       android:onClick="onClick"
       android:text="Go_Activity_2" />
</LinearLayout>

Layout:activity_1
<?xml version="1.0" encoding="utf-8"?>
<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"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:weightSum="1"
   tools:context="com.example.Activity1">


   <TextView
       android:id="@+id/tv_Activity1"
       android:layout_width="149dp"
       android:layout_height="wrap_content"
       android:layout_weight="0.10"
       android:text="Activity_1的頁面" />


   <Button
       android:id="@+id/btn_Activity_1_back"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:onClick="onClick"
       android:text="Back" />
</LinearLayout>

Layout:activity_2
   </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<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="horizontal"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:weightSum="1"
   tools:context="com.example.Activity2">


   <TextView
       android:id="@+id/tv_Activity2"
       android:layout_width="90dp"
       android:layout_height="47dp"
       android:layout_gravity="center_vertical"
       android:layout_weight="0.49"
       android:text="Activity_2的頁面" />


   <Button
       android:id="@+id/btn_Activity_2_back"
       android:layout_width="147dp"
       android:layout_height="wrap_content"
       android:layout_gravity="center_vertical"
       android:layout_weight="0.06"
       android:onClick="onClick"
       android:text="Back按鈕" />
</LinearLayout>



布局完成後 就可以開始寫程式碼了
JAVA:MainActivity
public class MainActivity extends AppCompatActivity {
  


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


中介者模式,我怎麼知道是哪一個鈕按下去了
由Switch管理。
   public void onClick(View view) {
       
       //找到這個按下去View的ID
       switch (view.getId()) {


           //方法1:顯性的意圖(最基本的用法)
           case R.id.bt_Go_Receive:


               //創造一個意圖 Intent(目前的位置,要過去的位置);
               Intent intent1 = new Intent(this, Activity1.class);


               //開始
               startActivity(intent1);
               break;


           //方法2:顯性的意圖(同上)
           case R.id.bt_Go_Text:
               Intent intent2 = new Intent(this, Activity2.class);
               startActivity(intent2);
               break;
       }
   }
}


Activity1
package com.example;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.example.andy.a0509_intent.R;
import java.util.Random;


public class Activity1 extends AppCompatActivity {
private TextView m_tv_Activity1;


   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_1);
      findID();   
   }
   private void findID() {
       m_tv_TextActivity_text = (TextView) findViewById(R.id.tv_Activity1);
   }

   public void onClick(View view) {
      
       //結束掉這一個Activity
       finish();
   }
}


Activity2
package com.example;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.example.andy.a0509_intent.R;


public class Activity2 extends AppCompatActivity {
   private TextView m_tv_Activity2;


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


   private void findID() {
       m_tv_TextActivity_text = (TextView) findViewById(R.id.tv_Activity2);
   }


   public void onClick(View view) {
      
       //結束掉這一個Activity
       finish();
   }
}




2.隱性應用:

使用介紹::未指定跳轉的頁面,我們稱隱性

簡單敘述:我們想像中一個場景
老師:請問 " 3+2=? "知道的同學請跟我說?
這時候鐵定會有2種情形發生
1.會『3+2=?』的同學, 會回答老師!
2.不會『3+2=?』的同學, ,就不回答老師


所以我們知道,腦海中有註冊"過3+2"的同學就會回應!
那我們該怎麼讓Activity 註冊過這個問題呢?


關鍵程式碼:
Manifest
           <intent-filter>
               <action android:name="問題"></action>
               <category android:name="android.intent.category.DEFAULT"></category>
           </intent-filter>


JAVA
Intent intent = new Intent();
intent3.setAction("問題");
startActivity(intent);


我們開始來實現這個功能吧


我們先在Layout;activity_main中 增加第三個按鈕(隱性測試用的)
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<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"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:weightSum="1"
   tools:context="com.example.MainActivity">


   <Button
       android:id="@+id/bt_Go_Activity_1"
       android:layout_width="200dp"
       android:layout_height="50dp"
       android:layout_gravity="center_vertical"
       android:onClick="onClick"
       android:text="Go_Activity_1" />


   <Button
       android:id="@+id/bt_Go_Activity_2”
       android:layout_width="200dp"
       android:layout_height="50dp"
       android:onClick="onClick"
       android:text="Go_Activity_2" />


   <Button
       android:id="@+id/bt_Go_隱式Intent"
       android:layout_width="200dp"
       android:layout_height="50dp"
       android:onClick="onClick"
       android:text="按鈕(隱性Intent測試)"
/>

</LinearLayout>



JAVA:MainActivity
package com.example;


import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.example.andy.a0509_intent.R;
import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {
   private EditText m_tv_editText;


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


   private void findID() {
       m_tv_editText = (EditText) findViewById(R.id.tv_editText);
   }


   public void onClick(View view) {
       switch (view.getId()) {
                     case R.id.bt_Go_Receive:
               Intent intent1 = new Intent(this, Activity1.class);               
               startActivity(intent1);
               break;


                  case R.id.bt_Go_Text:
               Intent intent2 = new Intent(this, Activity2.class);
               startActivity(intent2);
               break;


           //方法2:隱性的意圖
           case R.id.bt_Go_隱式Intent:
               Intent intent3 = new Intent();
               intent3.setAction("help");
               startActivity(intent3);
               break;
       }
   }
}


我們來看看成果吧 (P.S很少人會這麼做,這個方法幾乎都用在APP之間的傳遞)


沒有留言:

張貼留言