Sudah tentu soalan ini adalah mengenai kemudahan, tetapi rangka kerja semasa Apl mesti dipertimbangkan:
Gunakan panggilan balik seperti yang dinyatakan di atas tetapi ambil perhatian bahawa kerana panggilan balik dirujuk oleh pembolehubah statik, panggilan balik biasanya adalah kelas dalaman tanpa nama, yang boleh menyebabkan kebocoran memori.
Gunakan bas acara. Ia juga melaksanakan lapisan tengah dan menghantar keputusan melalui bas acara.
Syor: Memandangkan ia adalah pemfaktoran semula, anda boleh mempertimbangkan untuk membenarkan semua kawalan mempunyai fungsi mendapatkan hasil onActivityResult Tentukan antara muka, antara muka onActivityResult {
boolean onResult();
} Kawalan tersuai yang perlu mendengar panggilan balik melaksanakan antara muka ini Dalam BaseActivity, rekod kawalan ini dan hantarkannya kepada kawalan ini apabila hasil dikembalikan: kelas BaseActivity {
.
List<onActivityResult> resultViewList = new ArrayList();
void onCreate() {
ResultView view = ...;
resultViewList.add(view);
}
onActivityResult() {
for (onActivityResult view : resultViewList) {
boolean ret = view.onResult();
if (ret) {
break;
}
}
}
} Ini menyelesaikan sepenuhnya masalah yang diperlukan oleh kawalan untuk mendapatkan hasil Aktiviti.
Kod di atas adalah kod kasar, tetapi sebenarnya terdapat pertimbangan lain: masalah Kod permintaan berulang, semua Paparan perlu disimpan.
Apa yang anda katakan di atas adalah baik. Tentukan antara muka dan gunakan panggilan balik antara muka untuk melakukannya. Untuk paparan biasa yang lain, cuma laksanakan antara muka ini.
Pendekatan kami ialah menulis foto dan album sebagai Modul, kemudian tambahkan acara klik pada komponen yang menetapkan avatar, klik untuk melompat ke antara muka pemprosesan, dan kemudian kembali. Komponen tetapan tidak termasuk dalam Modul dan ditetapkan oleh pengguna Modul. Cara lain ialah menggunakan pemantauan acara seperti yang dinyatakan di atas Selepas memilih gambar album atau mengambil foto untuk mengesahkan gambar, cetuskan pendengar ini. Saya cadangkan anda bertanya kepada bos anda sama ada anda pasti menulis Paparan masuk dalam Modul
Membina gudang maven tempatan dan merangkum fungsi kawalan, tetingkap timbul dan lompat. Kemudian muat naik terus ke gudang maven tempatan, dan kemudian bergantung padanya kepada projek melalui Gradle Bina gudang maven tempatan, konfigurasikan Gradle dan muat naik pustaka anda sendiri ke gudang
Secara amnya, ini boleh dilakukan untuk perpustakaan dengan beberapa fungsi asas, dan seorang boleh mengekalkannya
Menggunakan onActivityResult tiada masalah, ini adalah cara Bilibili mengendalikan tinju Jika anda tidak mahu pemanggil memproses onActivityResult, anda boleh menulis perantaraan Activity dan selepas memproses onActivityResult, hantarkan hasil melalui panggilan balik Hantarkannya kepada pemanggil; atau sesuaikan kamera
Untuk logik jenis ini yang melibatkan antara muka lain, saya biasanya menulis modul yang berasingan Apabila memanggil, saya menggunakan antara muka Lapisan pelaksanaan menggunakan aktiviti perantaraan untuk menyelesaikan pemilihan/pemprosesan imej, dan akhirnya kembali melalui panggilan balik . Anda tidak perlu menulis perkara ini sendiri, terdapat banyak roda siap pakai di GitHub, cuma cari ImagePicker dan gunakannya.
Terima kasih semua, jawapan ini pada dasarnya adalah apa yang saya maksudkan. Soalan saya tidak jelas. Pemfaktoran semula saya bukan untuk mencipta kawalan avatar universal Apa yang saya mahu ialah meletakkan paparan avatar ini ke dalam susun atur aktiviti perniagaan, dan kemudian pemanggil tidak perlu melakukan apa-apa lagi. Rangkaian apa yang meminta untuk mengemas kini avatar, memuat naik avatar, memilih foto...semuanya dirangkumkan, bukannya memanggil semula kepadanya untuk mengendalikannya sendiri, kerana antara muka berkaitan avatar bagi aplikasi ini dalam syarikat kami adalah perkara biasa
Sudah tentu soalan ini adalah mengenai kemudahan, tetapi rangka kerja semasa Apl mesti dipertimbangkan:
Gunakan panggilan balik seperti yang dinyatakan di atas tetapi ambil perhatian bahawa kerana panggilan balik dirujuk oleh pembolehubah statik, panggilan balik biasanya adalah kelas dalaman tanpa nama, yang boleh menyebabkan kebocoran memori.
Gunakan bas acara. Ia juga melaksanakan lapisan tengah dan menghantar keputusan melalui bas acara.
Syor:
Memandangkan ia adalah pemfaktoran semula, anda boleh mempertimbangkan untuk membenarkan semua kawalan mempunyai fungsi mendapatkan hasil onActivityResult Tentukan antara muka,
antara muka onActivityResult {
}
.Kawalan tersuai yang perlu mendengar panggilan balik melaksanakan antara muka ini Dalam BaseActivity, rekod kawalan ini dan hantarkannya kepada kawalan ini apabila hasil dikembalikan:
kelas BaseActivity {
}
Ini menyelesaikan sepenuhnya masalah yang diperlukan oleh kawalan untuk mendapatkan hasil Aktiviti.
Kod di atas adalah kod kasar, tetapi sebenarnya terdapat pertimbangan lain: masalah Kod permintaan berulang, semua Paparan perlu disimpan.
Hanya proses dalam bentuk pendengar.
Apa yang anda katakan di atas adalah baik. Tentukan antara muka dan gunakan panggilan balik antara muka untuk melakukannya. Untuk paparan biasa yang lain, cuma laksanakan antara muka ini.
Pendekatan kami ialah menulis foto dan album sebagai Modul, kemudian tambahkan acara klik pada komponen yang menetapkan avatar, klik untuk melompat ke antara muka pemprosesan, dan kemudian kembali. Komponen tetapan tidak termasuk dalam Modul dan ditetapkan oleh pengguna Modul.
Cara lain ialah menggunakan pemantauan acara seperti yang dinyatakan di atas Selepas memilih gambar album atau mengambil foto untuk mengesahkan gambar, cetuskan pendengar ini.
Saya cadangkan anda bertanya kepada bos anda sama ada anda pasti menulis Paparan masuk dalam Modul
Membina gudang maven tempatan dan merangkum fungsi kawalan, tetingkap timbul dan lompat. Kemudian muat naik terus ke gudang maven tempatan, dan kemudian bergantung padanya kepada projek melalui Gradle
Bina gudang maven tempatan, konfigurasikan Gradle dan muat naik pustaka anda sendiri ke gudang
Secara amnya, ini boleh dilakukan untuk perpustakaan dengan beberapa fungsi asas, dan seorang boleh mengekalkannya
Menggunakan
onActivityResult
tiada masalah, ini adalah cara Bilibili mengendalikan tinjuJika anda tidak mahu pemanggil memproses
onActivityResult
, anda boleh menulis perantaraanActivity
dan selepas memprosesonActivityResult
, hantarkan hasil melalui panggilan balik Hantarkannya kepada pemanggil; atau sesuaikan kameraUntuk logik jenis ini yang melibatkan antara muka lain, saya biasanya menulis modul yang berasingan Apabila memanggil, saya menggunakan antara muka Lapisan pelaksanaan menggunakan aktiviti perantaraan untuk menyelesaikan pemilihan/pemprosesan imej, dan akhirnya kembali melalui panggilan balik .
Anda tidak perlu menulis perkara ini sendiri, terdapat banyak roda siap pakai di GitHub, cuma cari ImagePicker dan gunakannya.
Terima kasih semua, jawapan ini pada dasarnya adalah apa yang saya maksudkan. Soalan saya tidak jelas. Pemfaktoran semula saya bukan untuk mencipta kawalan avatar universal Apa yang saya mahu ialah meletakkan paparan avatar ini ke dalam susun atur aktiviti perniagaan, dan kemudian pemanggil tidak perlu melakukan apa-apa lagi. Rangkaian apa yang meminta untuk mengemas kini avatar, memuat naik avatar, memilih foto...semuanya dirangkumkan, bukannya memanggil semula kepadanya untuk mengendalikannya sendiri, kerana antara muka berkaitan avatar bagi aplikasi ini dalam syarikat kami adalah perkara biasa