前言:因为公司氛围没有用,一直很火的mvp模式像鬼一样听说过没见过,今天闲来无事了解一下,发现由普通的MVC改起来还是挺行云流水的,但像有些弹窗不知道写在P层还是V层
关于MVP的概念我就不详细说了,记住关键的一点就是将view与逻辑分离
在谷歌推荐写法下,M层被弱化,数据处理放在了P层
####1.定义一个P接口
1 2 3
| public interface BasePresenter { boolean something(); }
|
####2.定义一个V接口
1 2 3
| public interface BaseView<P extends BasePresenter> { void setPresenter(P presenter); }
|
####3.定义一个合约类管理上述两个接口,Presenter用于定义界面的逻辑与数据,View 用于定义对应的界面显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public class DateRecordContract { interface Presenter extends BasePresenter { void getTodayData(); void getAllData(); void checkData(); void insertDateBean(); void startTiming(); }
interface View extends BaseView<Presenter> { void startAnim(); void refreshUI(List<DateRecordBean> data); void stopAnim(); void refreshOneDate(DateRecordBean bean); void saveInputtext(String str); String getCurrenttext(); void hideInput(); }
}
|
####4.定义一个P层实现类,最好放在上面的接口同一个包下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| public class DateRecordPresenterImpl implements DateRecordContract.Presenter { private DateRecordContract.View view; private SharedPreferencesHelper spHelper;
public DateRecordPresenterImpl(DateRecordContract.View view,SharedPreferencesHelper sp) { this.view = view; view.setPresenter(this); spHelper = sp; }
@Override public void getTodayData() { List<DateRecordBean> list = ...; view.refreshUI(list); }
@Override public void getAllData() { List<DateRecordBean> list = ...; view.refreshUI(list); }
@Override public void checkData() {
}
@Override public void insertDateBean() { long endTime = System.currentTimeMillis(); DateRecordBean bean = new DateRecordBean();
view.refreshOneDate(bean); }
@Override public void startTiming() { view.hideInput(); view.startAnim();
spHelper.put(SharedPreferencesHelper.isStartTime, true);
view.saveInputtext(str); } @Override public boolean something() { return isStartRecord; } }
|
####5.定义一个View实现类,根据回调显示UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class MainActivity extends AppCompatActivity implements DateRecordContract.View { private DateRecordPresenterImpl presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
presenter = new DateRecordPresenterImpl(this,spHelper); presenter.getTodayData(); }
@Override public void refreshUI(List<DateRecordBean> data) { dapter.addBeans(data); } }
|
以上就是简单的MVP入门,哪里出问题了直接在合约类查看,还是挺方便,也可以把MainActivity改为Fragment实现View,有些疑问是不知道把Dialog放在哪,目前还是放在了Activity中
2018年9月5日08:02:16