程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> android-如何從一個TabHost Activity中返回一個結果(startActivityForResult)

android-如何從一個TabHost Activity中返回一個結果(startActivityForResult)

編輯:編程綜合問答
如何從一個TabHost Activity中返回一個結果(startActivityForResult)

在我的示例中有三個類:Class A,主類。Class A調用一個startActivityForResult

Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");

Class B, 這個類是一個TabActivity:

Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...

Class C, 這個類是一個正式的Activity:

Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();

onActivityResult在 Class A中被調用, 但是resultCode是RESULT_CANCELED而不是RESULT_OK 而且返回的intent是null。我怎麼能從Activity返回,而不是從TabHost?
我知道這個問題是我的Class C實際上是代替了Class B運行的,而且Class B是返回RESULT_CANCELED到Class A。我只是不知道有一個還起作用。

最佳回答:


哎,在弄了幾個小時和下載了android資源後,我終於找到答案了。
如果你仔細檢查activity類,你可以發現如果有一個mParent屬性設置的是null,finish()方法只是發了返回的結果,否則結果就會丟失

public void finish() {
    if (mParent == null) {
        int resultCode;
        Intent resultData;
        synchronized (this) {
            resultCode = mResultCode;
            resultData = mResultData;
        }
        if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
        try {
            if (ActivityManagerNative.getDefault()
                .finishActivity(mToken, resultCode, resultData)) {
                mFinished = true;
            }
        } catch (RemoteException e) {
            // Empty
        }
    } else {
        mParent.finishFromChild(this);
    }
}

所以我的解決方案就是如果存在的話,就將結果發到父activity中,就像這樣

Intent data = new Intent();
 [...]
if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
} else {
    getParent().setResult(Activity.RESULT_OK, data);
}
finish();

如果有人同樣碰到了這個問題,我希望我的方法能夠幫助你。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved