Android MVP

2018-09-27  本文已影响0人  lsyt0309

V层

/**
 * Activity UI 更新接口示例
 */
public interface MainPageView{

    void showToast(String msg);

}

P层

/**
 * Presenter抽象接口
 */
public interface Presenter<T> {

    void attachView(T view);

    void detachView();
}

M层

/**
 * 数据转换器
 */
public interface MainInfoInteractor{
  
    /**
     * 回调数据回传至P层
     */
    static interface Callback{
      void onResult(String json);
    }

    void loadData(String requestParamet, Callback callback);
    
    void loadData(String requestParamet);
}

V层接口实现

在Activity/Fragment中实现,并获取Peraenter对象
关系流程:V-->P

public class MainActivity extends AppCompatActivity implements MainPageView{
      
      private MainPresenter mPresenter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mPresenter = new MainPresenter(this);
        mPresenter.attachView(this);
    }

        @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detachView();
    }

    @Override
    public void showToast(String msg) {
       ...
    }
}

P层接口实现

实现Presenter接口与M中的Callback接口,并接收View对象
关系流程:V-->P-->M-->P-->V

public class MainPresenter implements Presenter<MainPageView>, MainInfoInteractor.Callback{

  private Context mContext;

  private MainPageView mView;  

  private RemoteMainInfoInteractor mInteractor;

  public MainPresenter(Context context){
    this.mContext = context;
    mInteractor = new RemoteMainInfoInteractor (this);
  }

  /**
   * Activity中调用的方法示例
   */
  public void loadData(String paramet){
    mInteractor.loadData(paramet);
  }
  

   @Override
    public void onResult(String json){
      if(mView != null){
        mView.showToast(json);
      }
    }
  
   @Override
   public void attachView(MainPageView view){
    this.mView = view;
   }

  @Override
  public void detachView(){
     this.mView = null;
  }
}

M层接口实现

关系流程:M-->P

public class RemoteMainInfoInteractor implements MainInfoInteractor{

  private Callback mCallback;
  
  public RemoteMainInfoInteractor(Callback callback){
    this.mCallback = callback;
  }

  @Override
  public void loadData(String paramet, Callback callback){
    ...
    String json = ...;
    if(callback != null){
      callback.onResult(json);
    }
  }

  @Override
  public void loadData(String paramet){
    ...
    String json = ...;
    if(mCallback != null){
      mCallback.onResult(json);
    }
  }
}
上一篇下一篇

猜你喜欢

热点阅读