Android 中一个MVP架构的简单Demo

在这里插入图片描述
在这里插入图片描述

三个接口(首先用接口定义好各层要做的事),三个具体的实现

IPresenter

package com.zhangyu.mymvp;

public interface IPresenter {
    //查询
    void search(String query);
}

IUserService

package com.zhangyu.mymvp;

public interface IUserService {
    String searchUser(int id);
}

IView

package com.zhangyu.mymvp;

//需要对UI进行的操作
public interface IView {
    //展示结果
    void showResult(String result);
}

MainActivity持有IPresenter

现在的activity是单纯的view层,只需要负责UI的更新,业务逻辑等放到Presenter中去处理

package com.zhangyu.mymvp;

import android.os.Bundle;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements IView {

    private SearchView svSearch;
    private TextView tvResult;

    private IPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        presenter = new Presenter(this);
    }

    @Override
    public void showResult(String result) {
        tvResult.setText(result);
    }

    private void initView() {
        svSearch = (SearchView) findViewById(R.id.sv_search);
        tvResult = (TextView) findViewById(R.id.tv_result);
        //展开搜索框
        svSearch.onActionViewExpanded();
        svSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                Toast.makeText(MainActivity.this, "开始搜索onQueryTextSubmit", Toast.LENGTH_SHORT).show();
                presenter.search(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
    }
}

Presenter持有IView、IUserService

Presenter中主要处理业务逻辑,对于MVC模式中的Controller层中抽离出业务逻辑层。

package com.zhangyu.mymvp;

public class Presenter implements IPresenter {

    private IView iView;
    private IUserService iUserService;

    public Presenter(IView iView) {
        this.iView = iView;
        iUserService = new UserService();
    }

    @Override
    public void search(String query) {
        int id = Integer.parseInt(query);
        String result = iUserService.searchUser(id);
        iView.showResult(result);
    }
}

UserService

具体的网络请求部分,这里只是做一个模拟

package com.zhangyu.mymvp;

public class UserService implements IUserService {

    @Override
    public String searchUser(int id) {
        return "查询到的结果——" + id + ":zhangyu";
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值