Nasıl bir sonuç (startActivityForResult) TabHost bir etkinlikten geri dönmek için? | Netgez.com
SORU
23 Mart 2010, Salı


Nasıl bir sonuç (startActivityForResult) TabHost bir etkinlikten geri dönmek için?

Benim örnekte 3 ders var: Sınıf, ana faaliyet. A sınıfı bir startActivityForResult çağırır:

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

B sınıfı, bu sınıfın bir TabActivity

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

C sınıfı, bu sınıfın normal bir Aktivite

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

onActivityResult Sınıf denir, ama resultCode RESULT_OK yerine RESULT_CANCELED ve iade niyet null. Nasıl bir TabHost içinde etkinliğinden bir şey iade edebilirim?

Fark ettim ki sorun benim C Sınıfı aslında çalışan içinde B Sınıfı ve B Sınıfı budur dönen RESULT_CANCELED geri A Sınıfı hiç bilmem. geçici bir çözüm henüz.

CEVAP
12 NÄ°SAN 2010, PAZARTESÄ°


Oh, Tanrım! Birkaç saat harcama ve Android kaynakları indirdikten sonra, nihayet bir çözüm için geldim.

Eğer Aktivite sınıfı bakarsanız, finish() yöntem yalnızca null 12 *özellik kümesi varsa sonucu geri gönderdiği göreceksiniz. Aksi takdirde sonuç kaybolur.

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);
    }
}

Benim çözüm bu gibi varsa ana faaliyeti sonucu ayarlamak için:

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

Eğer birisi bu sorun için çözüm yine görünüyorsa yararlı olacağını umuyoruz.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • AutoStream's Garage419

    AutoStream's

    15 EKÄ°M 2007
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011