Android: Bir etkinlik, onu çağıran etkinliğe nasıl sonuç döndürür?


128

Ben var Locationgibi birçok aktivite, çağrılabilir aktiviteyi Sign upve Order. Gelen Locationaktivite böylece aktivite kullanıcı, onun yere girerse Locationonu denen etkinlik için bu yeni bir konum dönecektir.

Bu nedenle, Sign upaktivite aktiviteyi çağırdığında Location, verileri Sign upaktiviteye döndürmesi gerekir . Başka bir zaman Orderetkinlik aynı şeyi yapacaktır.

Not

Bana kodu göndermem gerektiğini söyleyeceğinizi biliyorum, ancak sizden kodu vermenizi istemiyorum; Sadece bazı ipuçları, bağlantılar veya iyi konular istiyorum.


bitirmek () aramak için kullanabilirsiniz ..
Harshid


@Harshid, lütfen bana daha fazla ayrıntı verir misiniz, yoksa takdir edilecek bağlantılarınız varsa
kullanıcı

Yanıtlar:


254

Arama faaliyetine sonuç döndürmesi gereken bir faaliyet başlatmak için aşağıdaki gibi bir işlem yapmalısınız. Başladığınız aktivitenin sonucunu aldığınızı belirlemek için istek kodunu aşağıda gösterildiği gibi iletmelisiniz.

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

Aktivitede setData()sonuç döndürmek için yararlanabilirsiniz .

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

Ve sonra tekrar ilk aktivitede aşağıdaki kodu onActivityResult () 'a yazarsınız.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

Yorumunuza göre DÜZENLE: Üç dize döndürmek istiyorsanız, Uri kullanmak yerine anahtar / değer çiftlerini amaç ile kullanarak bunu izleyin.

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

Onları alın onActivityResult aşağıda gibi:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

ne söyledin Son yorumunuzu anlamıyorum, üzgünüm ingilizce iyi değilim, kodunuzu şimdi deniyorum, requestcodetam sayı ne koyabilirim?
kullanıcı

1
Sorun Yok (NP) dedim ve bunu uygulamada geç kalabileceğinizi söylediğiniz gibi, kendinize zaman ayırmanızı ve sonra bildirim alabilmem için yorum yapmamı söyledim. İstek koduna gelince, evet, int requestCode = 1 gibi bir tamsayı değeri verebilirsiniz;
Kanth

evet işe yaradı, cevabınızı kabul ediyorum, çok teşekkür ederim, bir yol olup olmadığını sormak istiyorum, bu yüzden sadece dizi göndermek değil, "şehir", "sokak" gibi 3 dize göndermek istiyorum. ana sayfa ", dizeleri etiketlemenin bir yolu var mı?
kullanıcı

cevabınız çok mükemmel, isterseniz başlığı birçok kullanıcının arayabileceği şekilde düzenleyin
kullanıcı kullanıcı

Amacın nasıl oluşturulacağını arıyordum : new Intent(this, OtherActivity.class);Bu kodu bir Aktivitede kullanabilirim.
Kullanıcı

3

Bitirmek ve sadece bir resultCode(veri olmadan) eklemek istiyorsanız, daha setResult(int resultCode)önce arayabilirsiniz finish().

Örneğin:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

Sonra arama etkinliğinizde, iyi olup resultCodeolmadığımızı görmek için , kontrol edin .

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

Aktiviteyi ile aramayı unutmayın startActivityForResult(intent, someCustomRequestCode).


4
birisinin kafasını karıştırması durumunda değeri Activity.RESULT_OKaslında -1. ActivitySabitleri kullanmanızı öneririm
jacoballenwood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.