在我的android應用程序中,我有一個主要活動,通過意圖創建另外兩個子活動。現在,子活動都將結果返回到主活動。在我的主要活動中, 如何處理兩個「onActivityResult(int requestCode,int resultCode,Intent data)」,因爲它無法在給定的類中使用兩個具有相同名稱的方法。希望我的問題是明確的..在具有多個活動的Android應用程序中處理onActivityResult
感謝
在我的android應用程序中,我有一個主要活動,通過意圖創建另外兩個子活動。現在,子活動都將結果返回到主活動。在我的主要活動中, 如何處理兩個「onActivityResult(int requestCode,int resultCode,Intent data)」,因爲它無法在給定的類中使用兩個具有相同名稱的方法。希望我的問題是明確的..在具有多個活動的Android應用程序中處理onActivityResult
感謝
您更改,當你調用startActivityForResult
使用requestCode
。
編輯:比如,我用這個:
startActivityForResult(i, App.REQUEST_ENABLE_BT);
這:
startActivityForResult(i, App.MANUAL_INPUT);
,然後您篩選的結果是這樣的:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
switch(requestCode){
case App.REQUEST_ENABLE_BT:
if(resultCode != RESULT_OK){
Toast.makeText(this, getString(R.string.label_bluetooth_disabled), Toast.LENGTH_LONG).show();
}
break;
case App.MANUAL_INPUT:
break;
}
}
這是什麼requestCode
是爲了。所以,你不得不這樣
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
case ACTIVITY1:
if(resultCode == RESULT_OK)
Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
break;
case ACTIVITY2:
if(resultCode == RESULT_OK)
Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
break;
}
一個設置,其中活性1和活性2在你Activity
常數。你會打電話給他們,像這樣:
startActivityForResult(activity1Intent, ACTIVITY1);
和
startActivityForResult(activity2Intent, ACTIVITY2);
有可能從一個子活動的結果意圖參數返回任何類型的數據:
撒哈拉活動:
Intent intent = new Intent();
intent.putExtra ("string_1", "hello");
intent.putExtra ("string_2", "world");
intent.putExtra ("int_1", 1000);
intent.putExtra ("long_1", 2000l);
activity.setResult (Activity.RESULT_OK, intent);
_
父活動:
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent intent)
{
if (resultCode == Activity.RESULT_OK)
{
String string_1 = intent.getStringExtra ("string_1", "");
String string_2 = intent.getStringExtra ("string_2", "");
int int_1 = intent.getIntExtra ("int_1", 0);
long long_1 = intent.getLongExtra ("long_1", 0);
}
}
您可以使用swicth的requestcode不同的結果
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (1):
{
// do this if request code is 1.
}
break;
case (2):
{
// do this if request code is 2.
}
break;
}
這是一個非常糟糕的設計。事實上,'Toast'是無法訪問的代碼,因爲只有當'resultCode'等於'RESULT_OK'時才進入交換機。你應該總是在'requestCode'中使用一個外部(和單個)'switch',並且在每個'case'中檢查不同的'resultCodes'。任何其他用於保存幾行代碼的設計最終都會成爲bug的來源。 – thelawnmowerman