Android學習筆記–Activity中使用Intent傳值示例程式碼

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

Intent,又稱為意圖,是一種執行時繫結機制,它能在程式執行的過程中連結兩個不同的元件(Activity、Service、BroadcastReceiver)。通過Intent,程式可以向Android表達某種請求或意願,Android會根據意願的內容選擇適當的元件來請求。

在這些元件之間的通訊中,主要是由Intent協助完成的。Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的元件,將Intent傳遞給呼叫的元件,並完成元件的呼叫。因此,Intent在這裡起著一個媒體中介的作用,專門提供元件互相呼叫的相關資訊,實現呼叫者與被呼叫者之間的解耦。
通過Intent請求Activity,必須在AndroidManifest.xml檔案中對被請求的Activity新增標籤配置,否則會導致錯誤。

Intent一般包含兩個主要資訊,action、data。
action:表示這個Intent此次操作的動作。
data:表示這次動作涉及的資料。

通過一個例子來展示Activity中使用Intent導向新Activity並傳遞資料。此程式僅在兩個頁面之間相互跳轉,但是每次跳轉會建立新的Activity,所以在startActivity()之後需要呼叫finish()銷燬當前Activity,如果不銷燬,多次跳轉後,程式的Activity棧中會存放多個Activity,點選裝置的返回按鈕,會發現會一直向後退。

主要步驟:
新建Android專案,增加新佈局檔案other.xml,新增Activity類otherActivity.class,用於接受Intent並展示other.xml。
在MainActivity類中,宣告一個Intent類,通過Intent的建構函式指明源和目標。
獲得Intent後,使用Intent.putExtra()方法對其傳入資料。
呼叫Activity.startActivity啟動這個Intent。
在otherActivity類中,使用Activity.getIntent()獲得當前Activity的Intent。
獲得Intent後,使用Intent.getXxxExtra()方法獲得其中儲存的資料。
在AndroidManifest.xml配置otherActivity節點。

示例程式碼
步驟2–3:
複製程式碼 程式碼如下:
public class MainActivity extends Activity {
private TextView textView;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textView1);
btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent建構函式:Intent來源;Intent目的。
Intent intent =new Intent(MainActivity.this,otherActivity.class);
intent.putExtra(“data”, “當前是頁面2,資訊來自頁面1”);
startActivity(intent);//啟動Activity
finish();
}
});
}
}

步驟4–5:
複製程式碼 程式碼如下:
public class otherActivity extends Activity {
private Button btn;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView=(TextView)findViewById(R.id.textView2);
btn=(Button)findViewById(R.id.button2);
//通過Activity.getIntent()獲取當前頁面接收到的Intent。
Intent intent =getIntent();
//getXxxExtra方法獲取Intent傳遞過來的資料
String msg=intent.getStringExtra(“data”);
textView.setText(msg);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(otherActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
});
}
}

步驟7:
複製程式碼 程式碼如下:
<application
android:allowBackup=”true”
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name”
android:theme=”@style/AppTheme” >
<activity
android:name=”cn.bgxt.IntentForAc.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=”.otherActivity”/>
</application>

從Activity中返回資料
上面例子中只是介紹了Activity通過Intent傳遞資料,然而在實際應用中,不僅僅需要向Activity傳遞資料,而且要從Activity中返回資料,雖然返回資料和傳遞資料類似,但是還是有部分割槽別。
主要區別如下:
傳遞資料需要使用Activity.startActivityForResult()方法啟動Activity,需要傳遞請求碼,而不是Activity.startActivity()。
返回資料的時候,呼叫Activity.setResult()方法設定返回Intent以及返回碼。
需要重寫源Activity的onActivityResult()方法以便於接受返回的Intent,在onActivityResult()中會判斷請求碼和響應碼。
通過一個例子說明從Activity返回資料。此程式有兩個Activity,在MainActivity中輸入加法運算的計算數,跳轉到otherActivity中輸入計算結果,並在點選返回後,把計算結果輸出到MainActivity中。
示例程式碼
MainActivity:
複製程式碼 程式碼如下:
public class MainActivity extends Activity {
private EditText one,two,result;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
one=(EditText)findViewById(R.id.one);
two=(EditText)findViewById(R.id.two);
result=(EditText)findViewById(R.id.result);
btn=(Button)findViewById(R.id.btnGo);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int ione=Integer.parseInt(one.getText().toString());
int itwo=Integer.parseInt(two.getText().toString());
Intent intent=new Intent(MainActivity.this, otherActivity.class);
intent.putExtra(“one”, ione);
intent.putExtra(“two”, itwo);
//啟動需要監聽返回值的Activity,並設定請求碼:requestCode
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//當otherActivity中返回資料的時候,會響應此方法
//requestCode和resultCode必須與請求startActivityForResult()和返回setResult()的時候傳入的值一致。
if(requestCode==1&&resultCode==2)
{
int three=data.getIntExtra(“three”, 0);
result.setText(String.valueOf(three));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

otherActivity:
複製程式碼 程式碼如下:
public class otherActivity extends Activity {
TextView tvShow;
EditText etResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
tvShow=(TextView)findViewById(R.id.tvShow);
etResult=(EditText)findViewById(R.id.etResult);
Intent intent=getIntent();
int a=intent.getIntExtra(“one”, 0);
int b=intent.getIntExtra(“two”, 0);
tvShow.setText(a ” ” b ” = ” ” ? “);
Button btnResult=(Button)findViewById(R.id.btnReturn);
btnResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//新宣告一個Intent用於存放放回的資料
Intent i=new Intent();
int result=Integer.parseInt(etResult.getText().toString());
i.putExtra(“three”, result);
setResult(2, i);//設定resultCode,onActivityResult()中能獲取到
finish();//使用完成後結束當前Activity的生命週期
}
});
}
}

您可能感興趣的文章:

詳解Android中Application設定全域性變數以及傳值Android 中兩個Activity 之間的傳值問題Android Activity的跳轉與傳值詳解Android程式設計使用WebView實現與Javascript互動的方法【相互呼叫引數、傳值】Android開發中Activity建立跳轉及傳值的方法Android程式設計之Application設定全域性變數及傳值用法例項分析Android 多個Activity之間的傳值Android學習筆記–使用剪下板在Activity中傳值示例程式碼android中Intent傳值與Bundle傳值的區別詳解Android採用GET方法進行網路傳值

相關文章

Android 開發 最新文章