MVP框架 mosby

版权声明: https://blog.csdn.net/ZHENZHEN9310/article/details/86247628

github 地址

官方文档地址

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,只允许竖屏,可以不用哈。

官方例子:

官方案例 getStarted

可以自行解耦,剥离

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);
  }
}

猜你喜欢

转载自blog.csdn.net/ZHENZHEN9310/article/details/86247628