亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何簡單封裝一個MVP基類

發布時間:2023-03-13 14:36:39 來源:億速云 閱讀:397 作者:iii 欄目:開發技術

這篇文章主要介紹“Android如何簡單封裝一個MVP基類”,在日常操作中,相信很多人在Android如何簡單封裝一個MVP基類問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android如何簡單封裝一個MVP基類”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Model

public abstract class BaseModel {
}

Presenter

public abstract class BasePresenter<M,V> {
    public M mIModle;
    public V mIView;
    public void attachV(V v){
        this.mIView = v;
        if (mIModle == null) {
            mIModle = createModel();
        }
    }
    //當View被銷毀掉時刪除Presenter層對View層的引用
    public void detachV(){
        mIView = null;
    }
    public abstract M createModel();
}

View

public interface IBaseView {
}
@SuppressLint("Registered")
public abstract class BaseMvpActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView{
    public P mPresenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (mPresenter == null) {
            mPresenter = createPresenter();
        }
        mPresenter.attachV(this);
    }
    //當View被銷毀掉時刪除Presenter層對View層的引用
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detachV();
    }
    public abstract P createPresenter();
}

這里Mode和View的基類里什么都沒有,其實我們知道一般封裝基類的目錄是為了簡化項目代碼,提高開發效率。所以這里兩個基類里面一般根據我們自己需求去實現。

Example

public interface ExampleDataSource {
    interface OnExampleFinishListener{
        void loading();
        void onSuccess();
        void onError();
    }
    void load(OnExampleFinishListener listener);
}

ExampleDataSource接口實現的是ExampleModel,而在它的內部接口OnExampleFinishListener是Model層的回調接口,它們真正實現是在Presenter層。對于獲取到數據后(成功或失敗)就是通過這個回調接口將數據傳遞Presenter層。

public class ExampleModel extends BaseModel implements ExampleDataSource {
    /**
     * model層主要用來進行數據存儲操作,例如:數據讀寫和網絡請求。
     * 這里進行下模擬耗時操作
     * @param listener
     */
    @Override
    public void load(final OnExampleFinishListener listener) {
        //加載中狀態
        listener.loading();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //獲取成功后進行回調
                listener.onSuccess();
            }
        },2000);
    }
}

這里我們在Model層模擬下耗時操作(例如:網絡請求),然后將得到的數據結果通過回調方法傳遞到Presenter層。

public interface ExampleContract extends IBaseView {
    interface ExamplePresent {
        void loadData();
    }
    interface ExampleView {
        void loadResult(String result);
        void showLoading();
        void loadFinish();
    }
}

這里我們將Presenter接口和View接口放在一個類中,這樣可以使我們能夠清晰的看到在Presenter層和View層中有哪些功能,方便我們以后維護。

public class ExamplePresenter extends BasePresenter<ExampleModel,ExampleContract.ExampleView> implements ExampleContract.ExamplePresent,ExampleDataSource.OnExampleFinishListener{
    @Override
    public void loadData() {
        mIModle.load(this);
    }
    @Override
    public void loading() {
        mIView.showLoading();
    }
    @Override
    public void onSuccess() {
        mIView.loadResult("成功");
        mIView.loadFinish();
    }
    @Override
    public void onError() {
    }
    @Override
    public ExampleModel createModel() {
        return new ExampleModel();
    }
}

從Presenter層我們可以看出,首先調用Model層的接口獲取數據進行一些邏輯操作然后通過View層接口實現數據的展示。

public class MainActivity extends BaseMvpActivity<ExamplePresenter> implements ExampleContract.ExampleView {
    private TextView tvName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvName = findViewById(R.id.tv_name);
        //加載數據
        mPresenter.loadData();
    }
    @Override
    public ExamplePresenter createPresenter() {
        return new ExamplePresenter();
    }
    //返會數據結果
    @Override
    public void loadResult(String result) {
        tvName.setText(result);
    }
    //加載過程
    @Override
    public void showLoading() {
        tvName.setText("正在加載,請稍等。。。");
    }
    //加載結束
    @Override
    public void loadFinish() {
    }
}

到此,關于“Android如何簡單封裝一個MVP基類”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚东县| 福建省| 常山县| 积石山| 凤阳县| 万荣县| 眉山市| 兴化市| 淮安市| 永胜县| 克拉玛依市| 泸溪县| 乌兰浩特市| 曲靖市| 广西| 甘孜| 翁牛特旗| 吉安县| 泰顺县| 伊川县| 咸丰县| 湘潭市| 诏安县| 梅河口市| 长子县| 康马县| 永嘉县| 牙克石市| 台南市| 湛江市| 莆田市| 伊宁市| 荆州市| 包头市| 龙陵县| 涟水县| 宾川县| 迁安市| 泌阳县| 渝北区| 特克斯县|