Saya memulai Kegiatan baru dari Fragmen saya dengan
startActivityForResult(intent, 1);
dan ingin menangani hasilnya dalam Aktivitas induk Fragmen:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode);
if (requestCode == 1) {
// bla bla bla
}
}
Masalahnya adalah saya tidak pernah mendapatkan requestCode
posting yang baru saya posting startActivityForResult()
.
Saya mendapatkan sesuatu seperti 0x40001
, 0x20001
dll. Dengan set bit acak yang lebih tinggi. Dokter tidak mengatakan apa-apa tentang ini. Ada ide?
android
android-fragments
onactivityresult
Dimanoid
sumber
sumber
Jawaban:
Anda menelepon
startActivityForResult()
dari AndaFragment
. Ketika Anda melakukan ini,requestCode
itu diubah olehActivity
yang memilikiFragment
.Jika Anda ingin mendapatkan yang benar
resultCode
dalam aktivitas Anda coba ini:Perubahan:
Untuk:
sumber
startActivityForResult
dalam sebuah fragmen dan mengharapkan hasil darionActivityResult
dalam fragmen itu, pastikan Anda memanggilsuper.onActivityResult
aktivitas host (jika Anda mengganti metode itu di sana). Ini karena aktivitasnyaonActivityResult
sepertinya menyebut fragmen ituonActivityResult
. Juga, perhatikan bahwa kode permintaan, ketika melakukan perjalanan melalui aktivitasonActivityResult
, diubah seperti yang dijelaskan dalam tautan yang Dimanoid kirimkan dalam jawabannya di bawah ini. Anda mungkin tidak perlu tahu itu, tetapi Anda tidak pernah tahu ...Kode permintaan tidak salah. Saat menggunakan fragmen pustaka dukungan v4, indeks fragmen dikodekan dalam 16 bit teratas dari kode permintaan dan kode permintaan Anda ada di 16 bit terbawah. Indeks fragmen kemudian digunakan untuk menemukan fragmen yang benar untuk memberikan hasil.
Oleh karena itu untuk Kegiatan mulai dari objek fragmen, menangani permintaan Kode onActivityResult seperti di bawah:
sumber
Lebih mudah:
Jawa :
int unmaskedRequestCode = requestCode & 0x0000ffff
Kotlin :
val unmaskedRequestCode = requestCode and 0x0000ffff
Periksa 16 bit yang lebih rendah, buka tabnya saja melakukan logika DAN dengan 16 bit atas memusatkan perhatian
sumber
Jika Anda memberikan konstan, publikasikan dan gunakan
startActivityResult
contoh:
sumber
Anda juga dapat menentukan
super.onActivityResult(requestCode, resultCode, data)
dalam
Activity
(jika Anda menimpaonActivityResult
) di inidan panggil ke
startActivityForResult(intent, requestCode)
dalamFragment
sumber
dalam Fragment
dalam Kegiatan Utama:
sumber