編輯:關於android開發
各位親愛的小伙伴,有沒有想我啊,我胡漢wing又回來了。
很長一段時間沒有更新博客。。原因是。。從離職回到學校以後,一直在享受最後的學生時光(打游戲).. 游戲固然很爽,但是覺得實在很荒廢,於是半夜詐個屍..學習一下流行的MVP模式,就拿我剛學Android的項目“wifi密碼讀取器”開刀吧。。以前的代碼很爛,所以來個徹底的重構…
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="代碼的編寫">代碼的編寫
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;
}
}
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) {
}
}
public interface IWifiView {
void setListViewData(ArrayList list);
void showSnackbar(View 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();
}
}
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模式的一點理解和應用,光是這一點內容,就理解了好久。。。。如果有什麼錯誤的地方,求各位拍磚,一起討論。
歡迎關注我的博客,蟹蟹!
Android View分區域點擊實現方案——1.根據坐標范圍 Android View分區域點擊實現方案——1.根據坐標范圍 標簽: Android學習記錄
圖表框架HelloCharts(2)柱狀圖,hellocharts柱狀圖1.效果圖 2.xml代碼 activity_column_chart.xml <Fram
深入了解android中的消息機制Handler 什麼是Handler? handler是Android給我們提供用來更新UI的一套機制,也是一套消息處理機制. 我們可以
Android實戰技巧之四十八:Android上的Java8和kotlin Java和Android這對搭檔目前也在風雨飄搖中。 技術圈子的事,往往被商業利益牽著鼻子
ErrorExecution failed for task '