这是网上常见的MvpActivity基类
public abstract class BaseMvpActivity<t extends BaseAdapter> extends AppCompatActivity {
public T presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter = initPresenter();
}
@Override
protected void onResume() {
super.onResume();
presenter.attach((V)this);
}
@Override
protected void onDestroy() {
presenter.dettach();
super.onDestroy();
}
public abstract T initPresenter();
}
这个基类完成了presenter的实例化、presenter持有的Activity对象的释放.
那么当一个Activity有多个功能时,应该怎样实现呢。
我想,一种方法是让一个presenter实现多个功能,这时可以继续用上面的基类,但是程序的功能不容易复用。比如Activity1有功能A和B,Activity2有功能C和D,当Activity3有功能A和D时,无法复用Activity1和2的presenter; 一种方法是一个Activity持有多个presenter,这时就要重写BaseActivity,我写了一个,如下:
public abstract class MvpActivity extends BaseActivity {
protected Map<String, BasePresenter> presenters;
@Override
protected void onCreate(Bundle savedInstanceState) {
presenters = createPresenter();
super.onCreate(savedInstanceState);
}
protected abstract Map<String, BasePresenter> createPresenter();
@Override
protected void onDestroy() {
super.onDestroy();
for (Map.Entry<String, BasePresenter> entry : presenters.entrySet()) {
if (entry.getValue() != null) {
entry.getValue().detachView();
}
}
}
protected BasePresenter getPresenter(){
return presenters.entrySet().iterator().next().getValue();
}
protected BasePresenter getPresenter(String key){
return presenters.get(key);
}
}
但是这个基类使用起来很别扭,说他别扭是因为:
在第一版中有public T presenter这个变量,可以直接调用presenter的功能,第二版中首先要调用getPresenter,还要类型转换才能使用。还有在createPresenter抽象方法实现起来不想第一版那么直观。
我JAVA功力不够,还请各位指点一下。
Aktiviti sepadan dengan penyampai A, dan kemudian penyampai yang sepadan A boleh dikembangkan Ia hanya digunakan sebagai kelas proksi dan pelaksanaan khusus lain dilaksanakan oleh penyampai B, C dan D yang lain. Dengan cara ini, terdapat. tidak perlu menukar aktiviti Kaedah memanggil juga boleh menggunakan semula penyampai, tetapi ia berasa pelik. . .
Terdapat kekangan protokol antara View dan Presenter
Jika anda benar-benar mahu melaksanakan berbilang Penyampai, anda boleh mentakrifkan beberapa kelas berbeza untuk menyokong lanjutan berbilang Penyampai yang berbeza:Dengan mengandaikan bahawa terdapat V1, P1, V2, P2, dan ActivityA yang sedia ada sepadan dengan fungsi P1/P2, ia juga harus menunjukkan bahawa ia melaksanakan V1/. Antara muka V2. Ini Harus ada PresenterA yang melaksanakan P1 dan P2 Ini adalah protokol VP yang lengkap.
Memandangkan berbilang halaman mungkin menggunakan fungsi yang sama, cara paling mudah ialah menggunakan berbilang warisan pada nod saya (satu pelaksanaan Pembentang ABCD empat. antara muka), supaya tidak kira Aktiviti benar-benar menggunakan Penyampai yang sama Jika anda pasti ia telah dilaksanakan sekarang, hanya melaksanakan proksi mengikut kaedah di atas
http://blog.csdn.net/github_3... Terdapat pengenalan di dalamnya