Saya memulai Activity
(turunan PreferenceActivity
) dari aktivitas pekerja saya sebagai berikut:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
kelas TIDAK memiliki setResult()
panggilan apapun . Faktanya, MyConfigure
kelas tidak memiliki kode apa pun kecuali di OnCreate()
mana ia memuat preferensi menggunakan addPreferencesFromResource
.
Sekarang onActivityResult
disebut dengan requestCode
dari 1458
prematur, tepat setelah MyConfigure
aktivitas dijalankan. Diuji pada emulator 1.6 dan 2.1 serta 2.1. Apakah ada panggilan untuk setResult()
dimakamkan di suatu tempat PreferenceActivity
? Atau bagaimana lagi panggilan prematur ini bisa dijelaskan?
android
android-activity
Panggilan balik Eugene Mayevski
sumber
sumber
Jawaban:
Ini diperbaiki dengan mengubah mode peluncuran ke
singleTop
:<activity android:name=".MainActivity" android:launchMode="singleTop">
Ada bug / fitur (?) Di Android, yang langsung melaporkan hasil (yang belum disetel) untuk
Activity
, dideklarasikan sebagaisingleTask
(terlepas dari fakta bahwa aktivitas terus berjalan). Jika kita mengubahlaunchMode
aktivitas induk darisingleTask
menjadisingleTop
, semuanya berfungsi seperti yang diharapkan - hasil hanya dilaporkan setelah aktivitas selesai. Meskipun perilaku ini memiliki penjelasan tertentu (hanya satusingleTask
aktivitas yang dapat ada dan dapat terjadi beberapa pelayan untuk itu), ini masih bukan batasan logis bagi saya.sumber
Saya memecahkan masalah saya setelah menghapus
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sebelum meneleponfragment.startActivityForResult(intent, 0);
.sumber
Saya baru saja menghapus semua "android: launchMode" kustom saya dari Aktivitas dan semuanya bekerja dengan sangat baik. Bukan ide yang baik untuk mengubahnya jika Anda tidak tahu PERSIS apa yang dipahami Android ... Android agak rumit dengan cara ini.
sumber
Ini terjadi pada saya ketika maksud
Intent.FLAG_RECEIVER_FOREGROUND
mengatur bendera.(Ya, bendera itu tidak terkait dengan aktivitas, tetapi saya memilikinya sesuai maksud saya sebagai bagian dari solusi senapan untuk masalah yang berbeda .)
sumber
Sekali lagi seperti dalam komentar Mayra,
setResult()
tidak ada hubungannya dengan masalah Anda. untuk beberapa alasan,MyConfigure
kelas selesai dengan sendirinya dan ketika itu terjadiPreferenceActivity
hanya mengasumsikan bahwa mungkin ada hasil dariMyConfigure
karena itulah cara Anda menulis kode.ini juga terjadi ketika Anda memaksa kembali aktivitas apa pun yang dimulai dengan
startActivityForResult()
...Jadi, saya pikir lebih baik fokus pada mengapa
MyConfigure
kelas Anda diselesaikan secara paksa.sumber