第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

google 官方 mvp架構(gòu)解讀,與簡單實現(xiàn)

標(biāo)簽:
Android

android 开发架构,mvp算是比较流行的,最近我也拜读谷歌官方写的代码,先简单的理解他们其中的设计,再去重新实现。
首先谷歌的项目有如下分包特点:
图片描述

依照模块进行分包。
我个人喜欢按照种类进行分包:
如下是我的分包
图片描述

其实哪种分包都无所谓,喜欢就行。方便开发是最好的。
于是:先解读google的基础类,BaseView 和 BasePresenter
BaseView谷歌是这么写的(其实就是view的接口,展示view)

public interface BaseView<T> {

    void setPresenter(T presenter);

}

将presenter 传值在里面,传值的作用,为了能让开发者使用presenter去操作view。presenter是主要作用于与网络数据沟通,获取model,处理数据一类的。

public interface BasePresenter {

    void start();

}

start主要执行一些初始化一类的东西

之后为view和presenter建立契约类

构建出如下契约类

public interface TaskDetailContract {

    interface View extends BaseView<Presenter> {

        void showTitle(String title);
    }

    interface Presenter extends BasePresenter {
        void editTask();
    }
}

为了方便解读,我进行了精简

于是官方将一个fragment作为view,
于是让fragment去实现TaskDetailContract.View接口

public class TaskDetailFragment extends Fragment implements TaskDetailContract.View {

    @Override
    public void setPresenter(@NonNull TaskDetailContract.Presenter presenter) {
        mPresenter = presenter;
    }

    @Override
    public void showTitle(String title) {
        mDetailTitle.setVisibility(View.VISIBLE);
        mDetailTitle.setText(title);
    }
}

我也对官方的demo进行精简,为了方便解读与理解。

当然还有一个最重要的类Presenter,继承了presenter之后,在里面就可以写很多东西了,如网络请求,如处理数据,这样就把android层次分的很清楚了。维护起来也是相当轻松的~

public class TaskDetailPresenter implements TaskDetailContract.Presenter {

    @Override
    public void start() {
        openTask();
    }

    @Override
    public void editTask() {
        if (null == mTaskId  mTaskId.isEmpty()) {
            mTaskDetailView.showMissingTask();
            return;
        }
        mTaskDetailView.showEditTask(mTaskId);
    }

}

在看到这一步的时候 ,有个疑问?官方把fragment作为view的话,activity去干嘛了?
于是查看activity的代码:解读如下

public class TaskDetailActivity extends AppCompatActivity {

    public static final String EXTRA_TASK_ID = "TASK_ID";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.taskdetail_act);

        // Set up the toolbar.
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBar ab = getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(true);
        ab.setDisplayShowHomeEnabled(true);

        // Get the requested task id
        String taskId = getIntent().getStringExtra(EXTRA_TASK_ID);

        TaskDetailFragment taskDetailFragment = (TaskDetailFragment) getSupportFragmentManager()
                .findFragmentById(R.id.contentFrame);

        if (taskDetailFragment == null) {
            taskDetailFragment = TaskDetailFragment.newInstance(taskId);

            ActivityUtils.addFragmentToActivity(getSupportFragmentManager(),
                    taskDetailFragment, R.id.contentFrame);
        }

        // Create the presenter
        new TaskDetailPresenter(
                taskId,
                Injection.provideTasksRepository(getApplicationContext()),
                taskDetailFragment);
    }

}

activity是将view(实际上是fragment)和Presenter创建出来。
activity里并没有多少代码。
如上就是解读,其实简单实现,都在每一步都解释的很清楚了,谢谢观看,如有疑问下面提问~

點(diǎn)擊查看更多內(nèi)容
8人點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
移動開發(fā)工程師
手記
粉絲
81
獲贊與收藏
3604

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消