Rumah  >  Soal Jawab  >  teks badan

java - android代码重构:如何把app设置里的头像UI做成通用的?

公司几款app设置界面都有用户头像,功能一样:网络请求获取头像更新,点击头像弹出:拍照or相册,选择照片更新头像。

现在都是写在各自项目中,大量重复代码,现在需要重构,老大说把这个View写成通用控件(不是整个界面),但是点击View进入拍照或者相册,选择返回照片是在Activity的onActivityResult里处理,我在View里面无法重写这个方法啊 怎么弄???

高洛峰高洛峰2744 hari yang lalu641

membalas semua(8)saya akan balas

  • 阿神

    阿神2017-04-18 10:49:49

    Sudah tentu soalan ini adalah mengenai kemudahan, tetapi rangka kerja semasa Apl mesti dipertimbangkan:

    1. 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.

    2. Gunakan bas acara. Ia juga melaksanakan lapisan tengah dan menghantar keputusan melalui bas acara.

    3. 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.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:49:49

    Hanya proses dalam bentuk pendengar.

    balas
    0
  • 怪我咯

    怪我咯2017-04-18 10:49:49

    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.

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:49:49

    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

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:49:49

    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

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:49:49

    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

    balas
    0
  • 黄舟

    黄舟2017-04-18 10:49:49

    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.

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:49:49

    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

    balas
    0
  • Batalbalas