Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中單個app內跳轉並傳輸數據事例

Android中單個app內跳轉並傳輸數據事例

編輯:關於Android編程

實現的效果圖片:主頁面上實現Button1與Button2的點擊;Button1點擊進入的界面顯示一段文字;Button2點擊進入的界面裡有一個文本框,編輯後點擊確定可以跳轉回主界面並在主界面下方顯示之前編輯的文字。

具體步驟如下:

1.依據之前建立工程的方法建立一個工程(參見《Android Application簡單實例(生成“Hello World!”)》一文),命名其為Hello World,layout名為main,Activity名為HelloWorldActivity。

2.建立好沒有錯誤之後,粘貼main文件,再復制兩個,分別命名為activityb,actiivtyc;並粘帖HelloWorldActivity文件,復制兩個,命名為ActvityB,ActivityC。修改java文件中的onCreate()。

3.之後我們的所有Activity都需要在Androdmanifest.xml文件中進行注冊,即:

 

4.之後編輯三個layout中的頁面文件,代碼在案例中可見,都采取線性布局,同時給各個控件加上id,位置大小布局,文字渲染。具體目標即上面幾個結果示意圖所需要達到的樣子。

main.xml:


activityb.xml:

 

 



    
      
 

activityc.xml:

 

 



    
    

 

5.編輯main頁面打開時的java文件,先設置哪個為布局文件->

之後得到控件,把控件的變量得到,就如同在js中得到控件的對象一樣->

之後為控件綁定監聽事件,這個控件的一個屬性是監聽,那個這個屬性中的參數,就要描述監聽什麼,如何監聽,需要new一個對象,作為這個參數來包含一個點擊的方法->

單擊後使用intent可以實現頁面的跳轉,分為兩條,一條為跳轉的描述,一條為啟動intent,(這裡注意可以回調的啟動與不可以回調的啟動)。

package com.HoD.helloworld;

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

public class HelloWorldActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//將布局文件設置為main.xml
		setContentView(R.layout.main);
		//得到兩個Button控件
		Button mButton1 = (Button)findViewById(R.id.button1);
		Button mButton2 = (Button)findViewById(R.id.button2);
		//為Button1綁定單擊事件
		mButton1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				// TODO Auto-generated method stub
				//使用intent啟動ActivityB
				Intent _intent = new Intent(HelloWorldActivity.this, ActivityB.class);
				startActivity(_intent);		
			}
		});
		//為Button2綁定單擊事件
		mButton2.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				// TODO Auto-generated method stub
				//使用intent啟動ActivityB
				Intent _intent = new Intent(HelloWorldActivity.this, ActivityC.class);
				startActivityForResult(_intent, 100);		
			}
		});	
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {	
		super.onActivityResult(requestCode, resultCode, 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.編輯ActivityC的java文件,同樣也是先設置布局文件->

之後同樣也是獲取按鈕實例,並為其設置監聽事件->

不同的在於監聽對象采取的方法不同,首先實例化Intent()對象->

之後獲取編輯欄實例,再獲取其值->

把值利用putExtra()存入到Intent()的實例化對象中->

傳回這個值,並關閉頁面。

package com.HoD.helloworld;

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

public class ActivityC extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//設置activityc.xml為布局文件
		setContentView(R.layout.activityc);
		//得到Button實例
		Button button1 = (Button)findViewById(R.id.buttonc1);
		button1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				// TODO Auto-generated method stub
				//實例化一個intent對象
				Intent data = new Intent();
				//獲取EditText實例
				EditText editText = (EditText)findViewById(R.id.etActivityc);
				//得到EditText的值
				String val = editText.getText().toString();
				//將EditText的值存到intent對象中(以鍵值的形式)
				data.putExtra("helloworld", val);
				//調用setResult方法,將intent對象(data)傳回父Activity
				setResult(Activity.RESULT_OK, data);
				//關閉當前Activity
				finish();
			}
		});
	}
}

7.在HelloWorld的java文件中,取得傳回來的值,不在本Activity生命周期的onCreate()中,而在onActivityResult()中,判斷傳回來的值合法後,取出值放入變量中,並實例化main中的隱藏文本框,顯示該值(結果已經顯示在上方HelloWorldActivity.java中)。

 

8.其中會遇到的典型問題是,intent cannot be resolved to a type,或者是監聽器不識別,內部onClick(View v)不識別。

這些都是相應的包未導入的結果,因為我們之前的JDK設置良好,jar包未主動添加,所以一般把相應的包import上就可以了(一般就是鼠標放在上頭就自動會提示import缺少的包了)。之後如果還報錯,那麼就Clean一下就好了,這個是eclipse未能自動編譯源代碼到build/classes(或其他classes目錄)導致類型找不到。

 

import android.content.DialogInterface.OnClickListener;或者如果導入這句,也會不對,應該是這個包import android.view.View.OnClickListener;

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