Model-View-Presenter library for android
总的来说是一个轻量级的用于android的mvp库,里面没有任何三方库(三方库需要维护成本)。
解决的是MVC模式下,activity既承担了UI工作,又承担了业务逻辑,过于臃肿的问题。
MVP模式下,Activity承担UI操作,Presenter承担业务逻辑,Model数据模型。
Activity (view层)持有preseter的引用,在presenter中进行业务逻辑的处理,处理结果返回Activity (view层)进行处理,presenter又持有view的引用。
文档中有简单使用的案例,里面还有一个lce (loading-content-error)的基类,适用于网络请求的列表页面。工作场景:第一次进行activity,进行网络请求,在MvpLceActivity中封装了loading (showLoading()/hideLoading()的操作),如果网络请求成功showContent(),请求失败showError(),还有refresh loadMore的方法。但是只有第一次进入才有这些效果;;;;也就是说期间我们需要做些别的网络请求,需要另外写showLoading()/hideLoading(),这个时候网络请求出错也不会showError啦。
view-state是说解决横竖屏切换,activity重建的问题,但是我们一般在AndroidManifest中,设置screenOrientation为portait,只允许竖屏,可以不用哈。
官方例子:
可以自行解耦,剥离
HelloWorldView
// View interface
interface HelloWorldView extends MvpView {
// displays "Hello" greeting text in red text color
void showHello(String greetingText);
// displays "Goodbye" greeting text in blue text color
void showGoodbye(String greetingText);
}
HelloWorldPresenter
// The presenter that coordinates HelloWorldView and business logic (GreetingGeneratorTask)
class HelloWorldPresenter extends MvpBasePresenter<HelloWorldView> {
// Greeting Task is "business logic"
private GreetingGeneratorTask greetingTask;
private void cancelGreetingTaskIfRunning(){
if (greetingTask != null){
greetingTask.cancel(true);
}
}
public void greetHello(){
cancelGreetingTaskIfRunning();
greetingTask = new GreetingGeneratorTask("Hello", new GreetingTaskListener(){
public void onGreetingGenerated(String greetingText){
if (isViewAttached())
getView().showHello(greetingText);
}
});
greetingTask.execute();
}
public void greetGoodbye(){
cancelGreetingTaskIfRunning();
greetingTask = new GreetingGeneratorTask("Goodbye", new GreetingTaskListener(){
public void onGreetingGenerated(String greetingText){
if (isViewAttached())
getView().showGoodbye(greetingText);
}
});
greetingTask.execute();
}
// Called when Activity gets destroyed, so cancel running background task
public void detachView(boolean retainPresenterInstance){
super.detachView(retainPresenterInstance);
if (!retainPresenterInstance){
cancelGreetingTaskIfRunning();
}
}
}
HelloWorldActivity
public class HelloWorldActivity extends MvpActivity<HelloWorldView, HelloWorldPresenter>
implements HelloWorldView {
@Bind(R.id.greetingTextView) TextView greetingTextView;
@Override
protected void onCreate(Bundle savedState){
super.onCreate(savedState);
setContentView(R.layout.activity_helloworld);
Butterknife.bind(this);
}
@Override // Called internally by Mosby
public HelloWorldPresenter createPresenter(){
return new HelloWorldPresenter();
}
@OnClick(R.id.helloButton)
public void onHelloButtonClicked(){
presenter.greetHello();
}
@OnClick(R.id.goodbyeButtonClicked)
public void onGoodbyeButtonClicked(){
presenter.greetGoodbye();
}
@Override
public void showHello(String greetingText){
greetingTextView.setTextColor(Color.RED);
greetingTextView.setText(greetingText);
}
@Override
public void showGoodbye(String greetingText){
greetingTextView.setTextColor(Color.BLUE);
greetingTextView.setText(greetingText);
}
}