Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 我的Android第五章:通過Intent實現活動與活動之間的交互,androidintent

我的Android第五章:通過Intent實現活動與活動之間的交互,androidintent

編輯:關於android開發

我的Android第五章:通過Intent實現活動與活動之間的交互,androidintent


 Intent在活動的操作

       作用:

     Itent是Android程序中各個組件直接交換的一個重要方式可以指定當前組件要執行任務同時也可以給各個組件直接進行數據交互
              同時Intent啟動往往可以啟動活動,啟動服務,以及發送廣播等場景        

        分類

               1.顯示Intent和隱示Intent

  顯示Intent操作

    1.首先我們新建一個Android工程

 

    在分別講解顯示意圖和隱示意圖時我們要在rec目錄 -layout資源新建活動 。

      

       然後右鍵點擊新建一個activity_second.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" >

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />
</LinearLayout>

 

   2.新建一個活動

      在我們添加完按鈕組件之後同時給按鈕取個名字叫button2和唯一id名,然後在src 目錄工程包下新建一個活動SecondActivity繼承Activity類讓其成為活動類

      然後重寫onCreate()方法,同時給該活動設置上下文布局文件

package com.example.intentdome;

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

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_second);//讀取我們剛才在layout資源文件新建的布局文件
	}

}

    3.然後在AndroidManifest.xml工程配置文件中注冊一個活動

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.intentdome"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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 android:name=".SecondActivity"
            >
        </activity>
    </application>

</manifest>

 

       以上步驟已經操作完畢,那我們開始下一步操作

  給按鈕綁定事件

      1.給定MainActivit視圖文件綁定一個點擊事件

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取按鈕對象
        Button btn1 = (Button)findViewById(R.id.button1);
        //給該按鈕綁定一個監聽事件
        btn1.setOnClickListener(new OnClickListener() {
            
            @Override
            //當鼠標點擊操作事著觸發該操作
            public void onClick(View v) {
                
            }
        });
        
    }

 

      2.創建意圖對象

 Intent的構
   該類有多個構造函數其中一個Intent(Context packageCntext,Class<?> cls)
   第一個參數:指定要啟動的上下文
   第二個參數:指定要啟動的目標活動

   //獲取一個意圖對象
    Intent intent = new Intent(MainActivity.this,SecondActivity.class);

 

 

    3.實現活動啟動之間的交互

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取按鈕對象
        Button btn1 = (Button)findViewById(R.id.button1);
        //給該按鈕綁定一個監聽事件
        btn1.setOnClickListener(new OnClickListener() {
            @Override
            //當鼠標點擊操作事著觸發該操作
            public void onClick(View v) {
                //獲取一個意圖對象
                //實現活動與活動直接的交互
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                //調用啟動活動操作
                startActivity(intent);
            }
            
        });
        
    }

             

      隱示Intent操作

            特點:隱示它並不明確表面指出我們要啟動那個活動,而是抽象的指定一系列action和category等信息

    1.實現隱示操作:打開AndroidManifest.xml文件重新編寫activity的內容

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            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 android:name=".SecondActivity">
            <intent-filter >
                <action android:name="com.example.intentdome.ACTION_START"/> 
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

 

      2.重新編寫MainActivity.java的按鈕點擊事件

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取按鈕對象
        Button btn1 = (Button)findViewById(R.id.button1);
        //給該按鈕綁定一個監聽事件
        btn1.setOnClickListener(new OnClickListener() {
            
            @Override
            //當鼠標點擊操作事著觸發該操作
            public void onClick(View v) {
                /*    //獲取一個意圖對象
                //實現活動與活動直接的交互
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                //調用啟動活動操作
                startActivity(intent);*/
                Intent intent = new Intent("com.example.intentdome.ACTION_START");
                startActivity(intent);
            }
            
        });
        
    }

 

    3.運行:輸出同樣的結果

  使用隱示啟動其他程序內部活動

        其實隱示不僅僅可以啟動自己程序的活動,還可以啟動其他程序的活動,使得Android多個應用共享成為了可以,這樣程序與程序直接進行數據交換,這樣就不用我們而外編寫其他程序活動來操作了

       以下一個案例展示通過自己本程序去調用系統的浏覽器來打開一個博客的網頁操作

   1.重新編寫MainActivity.java按鈕點擊事件

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取按鈕對象
        Button btn1 = (Button)findViewById(R.id.button1);
        //給該按鈕綁定一個監聽事件
        btn1.setOnClickListener(new OnClickListener() {
            
            @Override
            //當鼠標點擊操作事著觸發該操作
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.cnblogs.com/xiaotaojing/"));
                startActivity(intent);
            }
            
        });
        
    }

        

    以上是Intent中通過Intent來啟動一個活動操作,其實Intent會可以活動與活動直接進行數據交互和傳遞,那然我們來看看是怎麼樣的一個過程吧

    Intent實現活動中數據的傳遞

     設置數據

        Intetn提供了一個putExtra()方法用於以鍵-值對的形式進行數據的存放,相當與Serlet的作用域對象setAttibute()方法,puExtra()方法提供了方法重載,將傳遞的數據暫存在Intent中

         啟動一個活動到另一個活動時,只需要在重Intent中獲取數據即可

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //獲取按鈕對象
        Button btn1 = (Button)findViewById(R.id.button1);
        //給該按鈕綁定一個監聽事件
        btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			//當鼠標點擊操作事著觸發該操作
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this,SecondActivity.class);
				intent.putExtra("data", "Hello SecondActivity");
				startActivity(intent);
			}
			
        });
        
    }

    獲取數據

            可以通過getStringExtra()方法獲取存放的數據

Intent.getStringExtra(設值的參數名)

 

         然後在ScondActivity.java中編寫如下代碼

package com.example.intentdome;

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

public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		//通過提示框來顯示數據
		Toast.makeText(this, getIntent().getStringExtra("data"), Toast.LENGTH_SHORT).show();
	}

}

   運行測試  

                     

    攜帶數據返回上一個活動

   既然講到了一個活動可以給下一個活動傳遞數據,那可以返回數據為上一個活動呢? 其實是可以的,當你點返回鍵時不是可以返回上一個活動了嗎?哈哈,那只是返回並沒有攜帶數據一起返回 

         怎樣做才可以重一個活動返回上一個活動呢?還可以攜帶數據,其實我們需要用到一個方法就是startActivityForResulte() 其中該方法有兩個參數

          第一個參數  :Intent對象、第二個參數:請求的結果碼. 

 btn1.setOnClickListener(new OnClickListener() {
			
	@Override
	//當鼠標點擊操作事著觸發該操作
	public void onClick(View v) {
		Intent intent = new Intent(MainActivity.this,SecondActivity.class);
		startActivityForResult(intent, 1);
	}		
});

    第二在SecondActivity.java中編寫如下代碼

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

    Button btn2 = (Button)findViewById(R.id.button2);
    btn2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        Intent intent = new Intent();
        //設置要返回的值
        intent.putExtra("data_return", "我已經返回上一個活動了");
        //設置返回結果
        setResult(RESULT_OK, intent);
        finish();//銷毀前執行
    }
});

  由於我們設置了starActivityForReturn()方法來啟動SecondActivity,在SecondActivity被銷毀之後會調用一個活動的onActivityResult()方法,所以我要在MainActivity.java中重寫

      onActivityResult()方法

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
    	
    	switch (requestCode) {
	     case 1:
		 if(resultCode==RESULT_OK){
			Toast.makeText(this, data.getStringExtra("data_return"),Toast.LENGTH_SHORT).show() ;
		 }
		 break;
	
	      default:
		break;
	}
    }

  3.測試

                       

     成功執行

   是不是這次講解的知識點很強大呢?哈哈,這已經實現了像網站中頁面與頁面之間跳轉同時攜帶數據的效果 

  

    

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved