Android: bagaimana membuat suatu kegiatan mengembalikan hasil ke aktivitas yang menyebutnya?

128

Saya memiliki Locationkegiatan yang dapat dipanggil dari banyak kegiatan, seperti Sign updan Order. Dalam Locationaktivitas tersebut, pengguna memasukkan lokasinya, sehingga aktivitas tersebut Locationakan mengembalikan lokasi baru ini ke aktivitas yang memanggilnya.

Jadi ketika Sign upaktivitas memanggil Locationaktivitas, ia harus mengembalikan data ke Sign upaktivitas. Lain waktu Orderkegiatan akan melakukan hal yang sama.

Catatan

Saya tahu Anda akan memberi tahu saya bahwa saya harus memposting kode, tetapi saya tidak meminta Anda untuk memberi saya kode; Saya hanya ingin beberapa kiat, tautan, atau utas bagus.

pengguna pengguna
sumber
Anda dapat menggunakan panggilan finish () untuk kembali ..
Harshid
1
Apakah Anda memeriksa StartActivityForResult developer.android.com/reference/android/app/Activity.html
vinaykumar
@Harshid tolong beri saya detail lebih lanjut, atau jika Anda memiliki tautan yang akan dihargai
pengguna pengguna

Jawaban:

253

Untuk memulai suatu kegiatan yang harus mengembalikan hasil ke aktivitas panggilan, Anda harus melakukan sesuatu seperti di bawah ini. Anda harus melewati kode permintaan seperti yang ditunjukkan di bawah ini untuk mengidentifikasi bahwa Anda mendapatkan hasil dari aktivitas yang Anda mulai.

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

Dalam aktivitas, Anda dapat menggunakan setData()untuk mengembalikan hasil.

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

Jadi sekali lagi dalam aktivitas pertama Anda menulis kode di bawah ini di onActivityResult ()

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

Sunting berdasarkan komentar Anda: Jika Anda ingin mengembalikan tiga string, ikuti ini dengan memanfaatkan pasangan kunci / nilai dengan maksud alih-alih menggunakan Uri.

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

Dapatkan mereka di onActivityResult seperti di bawah ini:

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");
        }
    }
}
Kanth
sumber
apa yang kamu katakan? saya tidak mengerti komentar terakhir Anda, maaf saya tidak bisa berbahasa Inggris, saya mencoba kode Anda sekarang, apa yang requestcodebisa saya masukkan bilangan bulat?
pengguna pengguna
1
Saya berkata, Tidak Ada Masalah (NP) dan seperti yang Anda katakan Anda mungkin terlambat menerapkan ini, saya menjawab bahwa untuk mengambil waktu Anda sendiri dan kemudian berkomentar sehingga saya bisa mendapatkan pemberitahuan. Datang ke kode permintaan, ya Anda bisa memberikan nilai integer seperti int requestCode = 1;
Kanth
ya itu berfungsi dengan baik, saya menerima jawaban Anda, terima kasih banyak, saya ingin aks Anda jika ada cara jadi tidak hanya mengirim string, saya ingin mengirim 3 string, seperti "kota", "jalan", " home ", ada cara untuk memberi label string?
pengguna pengguna
jawaban Anda sangat bagus, jika Anda mau, sunting judulnya sehingga banyak pengguna dapat mencarinya
pengguna pengguna
Saya mencari cara membuat maksud : new Intent(this, OtherActivity.class);Saya dapat menggunakan kode ini dalam suatu Aktivitas.
Pengguna
3

Jika Anda ingin menyelesaikan dan hanya menambahkan resultCode(tanpa data), Anda dapat menelepon setResult(int resultCode)sebelumnya finish().

Sebagai contoh:

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

Kemudian dalam aktivitas menelepon Anda, periksa resultCode, untuk melihat apakah kami baik-baik saja.

@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 :-(
        }
    }
}

Jangan lupa untuk menelepon aktivitas tersebut startActivityForResult(intent, someCustomRequestCode).

lenooh
sumber
4
nilai Activity.RESULT_OKsebenarnya -1, dalam kasus yang membingungkan seseorang. Saya hanya akan menyarankan menggunakan Activitykonstanta
jacoballenwood