簡単なAndroidのMVPの例

例としてはAndroidのMVP
単純な要求の気象機能は、AndroidのMVPを使用する方法を示しています

結果のプレビュー

レディー
MVPプロセス

説明:
ステップ1:UIビュー参照プレゼンター、方法を実装
ステップ2:モデルプレゼンター呼び出しは、モデルの特定の論理行く
。ステップ3:モデルロジック実装、プレゼンターコールバックメソッドの
ステップ4:UI、コールバックメソッドビューに表示プレゼンターコールバック、即ちバック

Gradleの文書
1。
コンパイル「com.loopj.android:android-async-http:1.4.9」
の指示:非同期HTTPを使用してネットワークを要請

ディレクトリ構造

VのMVP
MainView.java

/ **
* WuXiaolong ON 2015年9月23日によって作成されます。
必要です*ビジネスの処理方法
* /

public interface MainView {
    void showData(MainModelBean mainModelBean);

    void showProgress();

    void hideProgress();
}

MainActivity

/ **
* WuXiaolong ON 2015年9月23日によって作成されます。
アクティビティ/フラグメントによって実施される方法で*ビュー、プレゼンターへの参照が含まれています
* /

public class MainActivity extends AppCompatActivity implements MainView {
    private ProgressBar mProgressBar;
    private TextView text;
    private MainPresenter mMainPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

    }

    private void initView() {
        text = (TextView) findViewById(R.id.text);
        mProgressBar = (ProgressBar) findViewById(R.id.mProgressBar);
        mMainPresenter = new MainPresenter(this);
        //制造延迟效果
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mMainPresenter.loadData();
            }
        }, 2000);

    }

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

    @Override
    public void showData(MainModelBean mainModelBean) {
        String showData = getResources().getString(R.string.city) + mainModelBean.getCity()
                + getResources().getString(R.string.wd) + mainModelBean.getWd()
                + getResources().getString(R.string.ws) + mainModelBean.getWs()
                + getResources().getString(R.string.time) + mainModelBean.getTime();
        text.setText(showData);
    }


    @Override
    public void showProgress() {
        mProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgress() {
        mProgressBar.setVisibility(View.GONE);
    }


}

PのMVP
MainPresenter.java

/ **
* WuXiaolong ON 2015年9月23日によって作成されます。
*ビュー層に戻っモデル層、からデータを取得ブリッジビューとモデル、
* /

public class MainPresenter implements Presenter<MainView>, IMainPresenter {
    private MainView mMainView;
    private MainModel mMainModel;

    public MainPresenter(MainView view) {
        attachView(view);
        mMainModel = new MainModel(this);
    }

    @Override
    public void attachView(MainView view) {
        this.mMainView = view;
    }

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

    public void loadData() {
        mMainView.showProgress();
        mMainModel.loadData();
    }


    @Override
    public void loadDataSuccess(MainModelBean mainModelBean) {
        mMainView.showData(mainModelBean);
        mMainView.hideProgress();
    }

    @Override
    public void loadDataFailure() {
        mMainView.hideProgress();
    }
}

プレゼンター

public interface Presenter<V> {

    void attachView(V view);

    void detachView();

}

IMainPresenter

/ **
* WuXiaolong ON 2015年9月23日によって作成されます。
*このインタフェース機能はモデルに接続されています
* /

public interface IMainPresenter {
    void loadDataSuccess(MainModelBean mainModelBean);

    void loadDataFailure();
}

MのMVP
MainModel

/ **
* WuXiaolong ON 2015年9月23日によって作成されます。
*データを操作し、格納、検索の責任者など、具体的な処理操作、
* /

public class MainModel {
    IMainPresenter mIMainPresenter;

    public MainModel(IMainPresenter iMainPresenter) {
        this.mIMainPresenter = iMainPresenter;
    }

    public void loadData() {
        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
        asyncHttpClient.get("http://www.weather.com.cn/adat/sk/101010100.html", new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                super.onSuccess(statusCode, headers, response);
                try {
                    MainModelBean mainModelBean = new MainModelBean();
                    JSONObject weatherinfo = response.getJSONObject("weatherinfo");
                    mainModelBean.setCity(weatherinfo.getString("city"));
                    mainModelBean.setWd(weatherinfo.getString("WD"));
                    mainModelBean.setWs(weatherinfo.getString("WS"));
                    mainModelBean.setTime(weatherinfo.getString("time"));
                    mIMainPresenter.loadDataSuccess(mainModelBean);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                super.onFailure(statusCode, headers, throwable, errorResponse);
                mIMainPresenter.loadDataFailure();
            }
        });
    }


}

MainModelBean

public class MainModelBean {
    private String city;
    private String wd;
    private String ws;
    private String time;
    //此处省略get和set方法    
}

ソースアドレス
https://github.com/WuXiaolong/AndroidMVPSample

概要
MVCパターンの
ビュー(ビュー):ユーザーインターフェース。
コントローラ(コントローラ):ビジネス・ロジック・
モデル(モデル):データ・ストレージ
へのビューコントローラの転送命令
コントローラは、ビジネスロジックを完了は、モデルの状態を変更するために必要な
モデルがビューに新しいデータを送信し、ユーザーからのフィードバック

MVPパターン
ビジネス・ロジックを処理し、MVCパターン層ビュー、MVCモデルに対応するプレゼンタコントローラ層の活性にMVP、および断片を用いて。各アクティビティデータを処理した後、モデルを得るされ、対応するプレゼンタを有します。

MVVMパターンは
MVPパターンと実質的に同一、プレゼンターViewModelに名前が変更されます。唯一の違いは、双方向バインディング(データバインディング)を使用することである:ビュー変更が自動的にビューモデルに反映され、およびその逆。

公開された30元の記事 ウォンの賞賛8 ビュー20000 +

おすすめ

転載: blog.csdn.net/wg22222222/article/details/50942738