Android MVP框架

今天看了一下MVP接口膊夹,大致的流程自己簡單的梳理一下:Activity、Fragment實(shí)現(xiàn)對應(yīng)IView接口并重寫接口對應(yīng)的方法(主要是用戶讓P層來通知我們的activity(V層)刷新頁面)婆瓜。當(dāng)一個需要修改頁面的事件需要發(fā)生的時候,Activity或Fragment通過持有的P層對象贡羔,去調(diào)用Model的執(zhí)行特定的任務(wù)(P層持有Model層的對象以及View層的對象)廉白,在P層再去實(shí)現(xiàn)Model層的任務(wù)執(zhí)行返回接口接受回調(diào)。在P層接受到對于的回調(diào)后乖寒,根據(jù)自己的需求去使用view的去調(diào)用刷新Activity或Fragment的布局猴蹂,講了這么多,我們直接來代碼吧楣嘁。磅轻。。

我希望大家在看這篇文章的時候認(rèn)真逐虚,靜下心來去看聋溜,自己按照代碼打一遍,我相信你會有所收獲叭爱。

項目目錄:

1撮躁、大致以model、presenter與view分包


image.png

2买雾、model:按照功能模塊劃分把曼、分別有l(wèi)oginModel接口與其對于的實(shí)現(xiàn)類LoginImp

3、view:按照界面加功能點(diǎn)來分activity漓穿、fragment以及功能點(diǎn)loginView接口嗤军,activity和fragment分別會去實(shí)現(xiàn)不同的iView接口。

LoginModel接口:

package wait.love.com.mvptest.model.login;

/**
 * Created by wanglinbo on 02/01/2019 10:01
 * E-Mail Address:1105059963@qq.com
 */
public interface LoginModel {

    //回調(diào)接口
    interface OnLoginListener {
        void onLoginSuccess();

        void onLoginFail();
    }

    void login(String username, String password, OnLoginListener onLoginListener);
}

LoginImp:LoginModel的接口的實(shí)現(xiàn)主要用戶數(shù)據(jù)的操作晃危,網(wǎng)絡(luò)請求叙赚,本地讀取等

package wait.love.com.mvptest.model.login;

import android.os.Handler;

/**
 * Created by wanglinbo on 02/01/2019 10:04
 * E-Mail Address:1105059963@qq.com
 * M層 主要做網(wǎng)絡(luò)請求,實(shí)現(xiàn)OnLoginLister的回調(diào)山害,以及主要實(shí)際網(wǎng)絡(luò)請求
 */
public class LoginImp implements LoginModel{
    @Override
    public void login(final String username, final String password, final OnLoginListener onLoginListener) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (username.equals("admin") && password.equals("123456")) {
                    onLoginListener.onLoginSuccess();
                } else {
                        onLoginListener.onLoginFail();
                }
            }
        }, 3000);


    }
}

LoginPresenter接口:聲明Activity或Fragment(V層)需要操作的方法

package wait.love.com.mvptest.presenter.login;

/**
 * Created by wanglinbo on 02/01/2019 10:19
 * E-Mail Address:1105059963@qq.com
 */
public interface LoginPresenter {
    void doLogin(String name,String password);
}

LoginPresenterImp: LoginPresenterImp是LoginPresenter接口的實(shí)現(xiàn)纠俭,主要用來做登錄這個功能的View與Model層的控制

package wait.love.com.mvptest.presenter.login;

import wait.love.com.mvptest.model.login.LoginModel;
import wait.love.com.mvptest.view.login.LoginView;

/**
 * Created by wanglinbo on 02/01/2019 10:20
 * E-Mail Address:1105059963@qq.com
 */
public class LoginPresenterImp implements LoginPresenter, LoginModel.OnLoginListener {

    private LoginModel loginModel;
    private LoginView loginView;

    public LoginPresenterImp(LoginModel loginModel, LoginView loginView) {
        this.loginModel = loginModel;
        this.loginView = loginView;
    }

    @Override
    public void onLoginSuccess() {
        loginView.hideProgress();
        loginView.loginSuccess();
        loginView.changeData();
    }

    @Override
    public void onLoginFail() {
        loginView.hideProgress();
        loginView.loginFail();
    }

    @Override
    public void doLogin(String name, String password) {
        loginView.showProgress();
        loginModel.login(name,password,this);
    }
}

LoginView:V層接口,

package wait.love.com.mvptest.view.login;

/**
 * Created by wanglinbo on 02/01/2019 09:57
 * E-Mail Address:1105059963@qq.com
 * View層接口
 */
public interface LoginView {
    void showProgress();
    void hideProgress();
    void changeData();
    void loginSuccess();
    void loginFail();
}

MainActivity:LoginView的實(shí)現(xiàn):


public class MainActivityextends AppCompatActivityimplements LoginView {

private Buttonlogin;

    private EditTextusername;

    private EditTextpassword;

    private LoginPresenterImploginPresenterImp =new LoginPresenterImp(new LoginImp(), this);

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        initView();

    }

private void initView() {

login =this.findViewById(R.id.login);

        username =this.findViewById(R.id.username);

        password =this.findViewById(R.id.password);

        login.setOnClickListener(mClick);

    }

@Override

    public void showProgress() {

Log.i("xyz", "登錄中");

    }

@Override

    public void hideProgress() {

Log.i("xyz", "隱藏進(jìn)度條");

    }

@Override

    public void changeData() {

Toast.makeText(MainActivity.this.getApplicationContext(),"成功",Toast.LENGTH_LONG).show();

        login.setText("登錄成功");

    }

@Override

    public void loginSuccess() {

Log.i("xyz", "登錄成功");

    }

@Override

    public void loginFail() {

Log.i("xyz", "登錄失敗");

    }

private View.OnClickListenermClick =new View.OnClickListener() {

@Override

        public void onClick(View view) {

switch (view.getId()) {

case R.id.login:

loginPresenterImp.doLogin(username.getText().toString().trim(), password.getText().toString().trim());

break;

            }

}

};

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浪慌,一起剝皮案震驚了整個濱河市冤荆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌权纤,老刑警劉巖钓简,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乌妒,死亡現(xiàn)場離奇詭異,居然都是意外死亡外邓,警方通過查閱死者的電腦和手機(jī)撤蚊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來损话,“玉大人侦啸,你說我怎么就攤上這事∩デ梗” “怎么了光涂?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拧烦。 經(jīng)常有香客問我忘闻,道長,這世上最難降的妖魔是什么恋博? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任齐佳,我火速辦了婚禮,結(jié)果婚禮上债沮,老公的妹妹穿的比我還像新娘炼吴。我一直安慰自己,他們只是感情好疫衩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布缺厉。 她就那樣靜靜地躺著,像睡著了一般隧土。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上命爬,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天曹傀,我揣著相機(jī)與錄音,去河邊找鬼饲宛。 笑死皆愉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的艇抠。 我是一名探鬼主播幕庐,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼家淤!你這毒婦竟也來了异剥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤絮重,失蹤者是張志新(化名)和其女友劉穎冤寿,沒想到半個月后歹苦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡督怜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年殴瘦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片号杠。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚪腋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姨蟋,到底是詐尸還是另有隱情屉凯,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布芬探,位于F島的核電站神得,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏偷仿。R本人自食惡果不足惜哩簿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酝静。 院中可真熱鬧节榜,春花似錦、人聲如沸别智。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薄榛。三九已至讳窟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敞恋,已是汗流浹背丽啡。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硬猫,地道東北人补箍。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像啸蜜,于是被迫代替她去往敵國和親坑雅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容