Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android開發之初識MVP模式

Android開發之初識MVP模式

編輯:關於android開發

Android開發之初識MVP模式


這裡寫圖片描述
各位親愛的小伙伴,有沒有想我啊,我胡漢wing又回來了。
很長一段時間沒有更新博客。。原因是。。從離職回到學校以後,一直在享受最後的學生時光(打游戲).. 游戲固然很爽,但是覺得實在很荒廢,於是半夜詐個屍..學習一下流行的MVP模式,就拿我剛學Android的項目“wifi密碼讀取器”開刀吧。。以前的代碼很爛,所以來個徹底的重構…

MVP模式

mvp模式的介紹網上有很多,這裡在簡述一下:

MVP即 Model View Presenter, 他與MVC的區別在於在MVP裡面View和Model不直接進行交互,完全交給Presenter。這樣Activity就真實的成為了一個View,邏輯任務交給Presenter處理。不再是以前Activity即充當View又沖當Controller的情況。

簡單來說如下圖:
這裡寫圖片描述

學習編寫

簡單的了解了一下MVP以後,開始拿“wifi密碼讀取器”開刀(wifi密碼讀取器是一款能夠讀取手機wifi密碼的應用,配合萬能鑰匙使用更贊哦。。)

明確需求

進行第一部分的編寫實現,需求如下圖:
這裡寫圖片描述

基本就是:
+ 初始化listview的內容
+ 為FloatingActionButton添加監聽<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMSBpZD0="代碼的編寫">代碼的編寫

首先,來一個實體Bean

public class WifiBean {

    private String mSsid = "";
    private String mComment = "";
    private String mKey = "";

    public String getmSsid() {
        return mSsid;
    }

    public void setmSsid(String mSsid) {
        this.mSsid = mSsid;
    }

    public String getmComment() {
        return mComment;
    }

    public void setmComment(String mComment) {
        this.mComment = mComment;
    }

    public String getmKey() {
        return mKey;
    }

    public void setmKey(String mKey) {
        this.mKey = mKey;
    }
}

Model層,主要用於數據的獲取或者其他增刪操作

public interface IWifiModel {

    ArrayList getWifis();
    void addWifi(WifiBean wifiBean);
    void delWifi(WifiBean wifiBean);
}

public class WifiModelImpl implements IWifiModel {
    @Override
    //這裡模擬實現從手機讀取出wifi的密碼
    public ArrayList getWifis() {
        ArrayList list = new ArrayList<>();
        for(int i = 0 ;i<5;i++) {
            list.add(new WifiBean());
        }
        return list;
    }

    @Override
    public void addWifi(WifiBean wifiBean) {

    }

    @Override
    public void delWifi(WifiBean wifiBean) {

    }
}

View層,主要表明view要做哪些事情

public interface IWifiView {
    void setListViewData(ArrayList list);

    void showSnackbar(View view);
}

因為Activity即為View,所以讓Activity實現這個接口,並且實現view的方法。

public class MainActivity extends AppCompatActivity implements IWifiView{
    private ListView mListView;
    private WifiAdapter mWifiAdapter;
    //包含一個presenter
    private WifiPresenterImpl mWifiPresenter;
    private Toolbar mToolbar;
    private FloatingActionButton mFAB;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //initViews()方法仍然不變
        initViews();
       //初始化一個Presenter
        mWifiPresenter = new WifiPresenterImpl(this);
        //將需要初始化的東西交由Presenter處理
        mWifiPresenter.onCreate();
    }

    private void initViews() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        mListView = (ListView) findViewById(R.id.listView);
        mFAB = (FloatingActionButton) findViewById(R.id.fab);
        mFAB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            //處理用戶的事件
                mWifiPresenter.showSnackbar(view);
            }
        });
    }
    //實現view接口的方法,為listview設置數據
    @Override
    public void setListViewData(ArrayList list) {
        mWifiAdapter = new WifiAdapter(this,list);
        mListView.setAdapter(mWifiAdapter);
    }
    //實現view接口的方法,彈出Snackbar

    @Override
    public void showSnackbar(View view) {
        Snackbar.make(view, "側滑有驚喜哦!", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }


}

最後是Presenter ,用來處理Model和View

public interface IWifiPresenter {
    //交付過來的onCreate
    void onCreate();
}

public class WifiPresenterImpl implements IWifiPresenter{
    private IWifiView mWifiView;
    private IWifiModel mWifiModel;

    public WifiPresenterImpl(IWifiView wifiView) {
        //傳入View
        mWifiView = wifiView;
        //初始化Model
        mWifiModel = new WifiModelImpl();
    }
    //私有方法,在onCreate裡調用,用來初始化listview數據,presenter操作model和view 
    private void setWifiDatas() {
        mWifiView.setListViewData(mWifiModel.getWifis());
    }

    //交付過來的onCreate()周期
    @Override
    public void onCreate() {
        setWifiDatas();
    }

    //讓Snackbar顯示
    public void showSnackbar(View view) {
        mWifiView.showSnackbar(view);
    }
}

好了,基本上簡單的展示寫完了,可以看到思路邏輯非常的清晰。這也是我對MVP模式的一點理解和應用,光是這一點內容,就理解了好久。。。。如果有什麼錯誤的地方,求各位拍磚,一起討論。

歡迎關注我的博客,蟹蟹!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved