Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android應用開發學習筆記之startActivityForResult

Android應用開發學習筆記之startActivityForResult

編輯:關於Android編程

如果我們有這樣的需求:使用Activity1啟動Activity2,Activity2處理完數據後,將處理結果返回給Activity1,這時,可以使用startActivityForResult()函數。下面我們通過一個例子來看這個函數的用法,   


我們先來看主布局文件main.xml,其內容如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="請輸入第一個數字:" />
    <EditText 
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />"
    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="請輸入第二個數字:" />
    <EditText 
        android:id="@+id/editText2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    
    <Button 
        android:id="@+id/button"
        android:text="提交"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" />
    
    <TextView 
        android:id="@+id/textResult"
        android:textSize="20dp"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    "
</LinearLayout>

下面看主Activity,其內容如下:

package com.liuhaoyu;

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

public class MainActivity extends Activity {
	String num1, num2;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final EditText edit1 = (EditText)findViewById(R.id.editText1);
        final EditText edit2 = (EditText)findViewById(R.id.editText2);
        
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				num1 = edit1.getText().toString();
				num2 = edit2.getText().toString();
				Intent intent=new Intent(MainActivity.this, SecondActivity.class);
				Bundle bundle = new Bundle();
				bundle.putCharSequence("number1", num1);
				bundle.putCharSequence("number2", num2);
				intent.putExtras(bundle);
				startActivityForResult(intent, 0x11);
			}
		});
    }

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
		if(0x11 == resultCode)
		{
			TextView textResult = (TextView)findViewById(R.id.textResult);
			String result = data.getStringExtra("result");
			textResult.setText(num1 + " + " + num2 + " = " + result);
			
		}
		}
}


在啟動SecondActivity時,與上篇文章中使用startActivity()函數不同,這裡使用的是startActivityForResult(),該函數要求被啟動的活動即SecondActivity在處理完數據後,返回一個結果給MainActivity。startActivityForResult函數的第二個參數是兩個Activity約定的請求碼,可以自己定義,本程序使用0x11。

在MainActivity中,還需要實現onActivityResult回調函數,當SecondActivity將處理結果返回後,會執行這個函數。

SecondActivity的實現代碼如下:

 


package com.liuhaoyu;

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

public class SecondActivity extends Activity {	
	int sum;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        final String num1 = bundle.getString("number1");
        final String num2 = bundle.getString("number2");
        
        sum = Integer.parseInt(num1) + Integer.parseInt(num2);
        
        TextView text = (TextView)findViewById(R.id.textView);
        text.setText(num1 + " + " + num2 + " = " + String.valueOf(sum));
        
        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				final String result = String.valueOf(sum);
				Intent data = new Intent();
				data.putExtra("result", result);

				setResult(0x11, data);
				finish();
			}
		});
    }
}


得到處理結果後,當用戶點擊“返回”按鈕,在該按鈕的監聽函數中,通過調用setResult()函數將要傳遞給MainActivity的數據返回。

SecondActivity的布局文件內容如下:

 

<?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:id="@+id/textView"
        android:textSize="20dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
    <Button 
        android:id="@+id/button1"
        android:text="返回"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />"
    
</LinearLayout>

最後,在AndroidManifest.xml文件中聲明SecondActivity:

 	         <activity 
		     android:icon="@drawable/ic_launcher"
		     android:name=".SecondActivity"
		     android:label="計算結果"
		     android:theme="@android:style/Theme.Dialog"
		     >
		</activity>

 

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