編輯:關於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添加監聽<喎?/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模式的一點理解和應用,光是這一點內容,就理解了好久。。。。如果有什麼錯誤的地方,求各位拍磚,一起討論。
歡迎關注我的博客,蟹蟹!
什麼是AIDL以及如何使用 ①aidl是Android interface definition Language 的英文縮寫,意思Android 接口定義語言。 ②使用
一、前言在Android開發中,會經常涉及到顯示圖片的相關操作,在網上查閱資料,ImageLoader得到大家廣泛的使用,本篇文章針對初使用者的一個向導,同時也是自己使用
1,動畫系統配置創建游戲對象並添加Animation組件,然後將動畫文件拖入組件。進入動畫文件的Debug屬性面板選中Legacy屬性 選中游戲對象,打開Ani
前言隨著MVP概念的興起和發展,MVP使用越來越廣泛,當然MVP的優勢也越來越被認同,在合作開發功能模塊細分中MVP有著得天獨厚的優勢。本篇文章就來簡單的說說如何使用MV