栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android mvp模式下多个类继承单接口,数据同时回调打印

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android mvp模式下多个类继承单接口,数据同时回调打印

android MVP 单个activity 拆分成多个view, 当A view 点击按钮后,B /C view 继承的接口同时可以回调到A view的数据

MvpActivity 单个页面 代码

package com.example.demo.mvp.view;

import android.app.Activity;
import android.os.Bundle;

import com.example.demo.databinding.ActivityMvpBinding;
import com.example.demo.mvp.presenter.MvpPresenterClass;

public class MvpActivity extends Activity {
    // viewBinding数据绑定节约了findViewByid
    private ActivityMvpBinding binding;
    // 拆分的主view
    private MainView mainView;
    // P层
    private MvpPresenterClass presenterClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 数据绑定
        binding = ActivityMvpBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        
        mainView = new MainView(binding, this);
        presenterClass = new MvpPresenterClass(this);
        mainView.updateMainView(presenterClass);
    }
}

MainVIew

package com.example.demo.mvp.view;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;

import com.example.demo.R;
import com.example.demo.databinding.ActivityMvpBinding;
import com.example.demo.mvp.presenter.MvpPresenterClass;
import com.example.demo.mvp.MvpView;

import java.util.ArrayList;
import java.util.List;


public class MainView implements MvpView, View.OnClickListener {
    private final ActivityMvpBinding binding;
    private final static String TAG = MainView.class.getName();
    private final Context context;
    private MvpPresenterClass mvpPresenterClass;
    private ShowView showView;
    private TimeView timeView;

    public MainView(ActivityMvpBinding binding, Context context) {
        this.binding = binding;
        this.context = context;
        initView();
    }


    private void initView() {
        binding.mainView.mvp1.setOnClickListener(this);
        binding.mainView.mvp2.setOnClickListener(this);
    }

    @Override
    public void bu1Status(int status) {
        Log.d(TAG, "mvp   bu1Status: " + status);

    }

    @Override
    public void bu2Status(int status) {
        Log.d(TAG, "mvp   bu2Status: " + status);
    }

    @Override
    public void bu3Status(int status) {
        Log.d(TAG, "mvp   bu3Status: " + status);
    }

    @Override
    public void bu4Status(int status) {
        Log.d(TAG, "mvp   bu4Status: " + status);
    }

    @Override
    public void bu5Status(int status) {
        Log.d(TAG, "mvp   bu5Status: " + status);
    }

    @Override
    public void bu6Status(int status) {
        Log.d(TAG, "mvp   bu6Status: " + status);
    }


    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mvp1:
                mvpPresenterClass.setButton1(1);
                break;
            case R.id.mvp2:
                mvpPresenterClass.setButton2(2);
                break;

            default:
                break;
        }
    }

    public void updateMainView(MvpPresenterClass presenterClass) {
        this.mvpPresenterClass = presenterClass;
        showView = new ShowView(binding.showView, context);
        timeView = new TimeView(binding.timeView, context);

        showView.updateTimeView(presenterClass);
        timeView.updateTimeView(presenterClass);

        mvpPresenterClass.registerCallback(this);
    }
}

ShowVIew

package com.example.demo.mvp.view;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.View;

import com.example.demo.R;
import com.example.demo.databinding.ShowViewBinding;
import com.example.demo.mvp.presenter.MvpPresenterClass;
import com.example.demo.mvp.MvpView;


public class ShowView implements MvpView, View.OnClickListener {
    private static final String TAG = ShowView.class.getSimpleName();
    private final ShowViewBinding binding;
    private MvpPresenterClass presenterClass;
    private Context context;

    public ShowView(ShowViewBinding binding, Context context) {
        this.context = context;
        this.binding = binding;
        initView();
    }

    public void updateTimeView(MvpPresenterClass presenterClass) {
        this.presenterClass = presenterClass;
        presenterClass.registerCallback(this);
    }


    private void initView() {
        binding.mvp3.setOnClickListener(this);
        binding.mvp4.setOnClickListener(this);
    }

    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mvp3:
                presenterClass.setButton3(3);
                break;

            case R.id.mvp4:
                presenterClass.setButton4(4);
                break;

            default:
                break;

        }
    }


    @Override
    public void bu1Status(int status) {
        Log.d(TAG, "mvp   bu1Status: " + status);
    }

    @Override
    public void bu2Status(int status) {
        Log.d(TAG, "mvp   bu3Status: " + status);
    }

    @Override
    public void bu3Status(int status) {
        Log.d(TAG, "mvp   bu3Status: " + status);
    }

    @Override
    public void bu4Status(int status) {
        Log.d(TAG, "mvp   bu4Status: " + status);
    }

    @Override
    public void bu5Status(int status) {
        Log.d(TAG, "mvp   bu5Status: " + status);
    }

    @Override
    public void bu6Status(int status) {
        Log.d(TAG, "mvp   bu6Status: " + status);
    }
}

TimeView

package com.example.demo.mvp.view;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.View;

import com.example.demo.R;
import com.example.demo.databinding.TimeViewBinding;
import com.example.demo.mvp.presenter.MvpPresenterClass;
import com.example.demo.mvp.MvpView;


public class TimeView implements MvpView, View.OnClickListener {
    private static final String TAG = MvpView.class.getSimpleName();
    private final TimeViewBinding binding;
    private MvpPresenterClass presenterClass;
    private Context context;

    public TimeView(TimeViewBinding binding, Context context) {
        this.context = context;
        this.binding = binding;
        initView();
    }

    private void initView() {
        binding.mvp5.setOnClickListener(this);
        binding.mvp6.setOnClickListener(this);

    }

    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            case R.id.mvp5:
                presenterClass.setButton5(5);

                break;

            case R.id.mvp6:
                presenterClass.setButton6(6);
                break;

            default:
                break;
        }
    }

    @Override
    public void bu1Status(int status) {
        Log.d(TAG, "mvp   bu1Status: " + status);
    }


    @Override
    public void bu2Status(int status) {
        Log.d(TAG, "mvp   bu3Status: " + status);
    }

    @Override
    public void bu3Status(int status) {
        Log.d(TAG, "mvp   bu3Status: " + status);
    }

    @Override
    public void bu4Status(int status) {
        Log.d(TAG, "mvp   bu4Status: " + status);
    }

    @Override
    public void bu5Status(int status) {
        Log.d(TAG, "mvp   bu5Status: " + status);
    }

    @Override
    public void bu6Status(int status) {
        Log.d(TAG, "mvp   bu6Status: " + status);
    }

    public void updateTimeView(MvpPresenterClass presenterClass) {
        this.presenterClass = presenterClass;
        presenterClass.registerCallback(this);

    }
}

MvpModelListener model 的接口

package com.example.demo.mvp.model;

import com.example.demo.mvp.FunctionListener;


public interface MvpModelListener {
    
    void getButton1Status(int status, FunctionListener listener);

    
    void getButton2Status(int status, FunctionListener listener);

    
    void button3Status(int status, FunctionListener listener);

    
    void button4Status(int status, FunctionListener listener);

    
    void button5Status(int status, FunctionListener listener);

    
    void button6Status(int status, FunctionListener listener);
}

MvpModelClass model 的实现类

package com.example.demo.mvp.model;

import com.example.demo.mvp.FunctionListener;


public class MvpModelClass implements MvpModelListener {
    @Override
    public void getButton1Status(int status, final FunctionListener listener) {
        listener.success(1);
    }

    @Override
    public void getButton2Status(int status, final FunctionListener listener) {
        listener.success(2);
    }

    @Override
    public void button3Status(int status, final FunctionListener listener) {
        listener.success(3);
    }

    @Override
    public void button4Status(int status, final FunctionListener listener) {
        listener.success(4);
    }

    @Override
    public void button5Status(int status, final FunctionListener listener) {
        listener.success(5);
    }

    @Override
    public void button6Status(int status, final FunctionListener listener) {
        listener.success(6);
    }
}

MvpPresenter Presenter接口

package com.example.demo.mvp.presenter;


public interface MvpPresenter {
    
    void setButton1(int status);

    
    void setButton2(int status);

    
    void setButton3(int status);

    
    void setButton4(int status);

    
    void setButton5(int status);

    
    void setButton6(int status);

    
    void onDestroy();
}

MvpPresenterClass Presenter实现类

package com.example.demo.mvp.presenter;

import android.content.Context;

import com.example.demo.mvp.FunctionListener;
import com.example.demo.mvp.MvpView;
import com.example.demo.mvp.model.MvpModelClass;
import com.example.demo.mvp.model.MvpModelListener;

import java.util.ArrayList;
import java.util.List;


public class MvpPresenterClass implements MvpPresenter, FunctionListener {
    private List mvpViewList = new ArrayList<>();
    private final MvpModelListener mvpModel;

    public MvpPresenterClass(Context context) {
        this.mvpModel = new MvpModelClass();
    }

    public void registerCallback(MvpView mvpView) {
        if (!mvpViewList.contains(mvpView)) {
            mvpViewList.add(mvpView);
        }
    }


    @Override
    public void setButton1(int status) {
        // 去获取数据
        mvpModel.getButton1Status(1, this);
    }

    @Override
    public void setButton2(int status) {
        mvpModel.getButton2Status(1, this);
    }

    @Override
    public void setButton3(int status) {
        mvpModel.button3Status(1, this);
    }

    @Override
    public void setButton4(int status) {
        mvpModel.button4Status(1, this);
    }

    @Override
    public void setButton5(int status) {
        mvpModel.button5Status(1, this);
    }

    @Override
    public void setButton6(int status) {
        mvpModel.button6Status(1, this);
    }

    @Override
    public void onDestroy() {
        mvpViewList = null;
    }

    @Override
    public void success(int state) {
        switch (state) {
            case 1:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu1Status(state);
                }
                break;

            case 2:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu2Status(state);
                }
                break;

            case 3:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu3Status(state);
                }
                break;

            case 4:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu4Status(state);
                }
                break;

            case 5:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu5Status(state);
                }
                break;

            case 6:
                for (int i = 0; i < mvpViewList.size(); i++) {
                    mvpViewList.get(i).bu6Status(state);
                }
                break;

            default:
                break;

        }
    }

    @Override
    public void fail(Throwable throwable) {

    }
}

MvpView mvp的view

package com.example.demo.mvp;


public interface MvpView {
    
    void bu1Status(int status);

    
    void bu2Status(int status);

    
    void bu3Status(int status);

    
    void bu4Status(int status);

    
    void bu5Status(int status);

    
    void bu6Status(int status);
}

FunctionListener

package com.example.demo.mvp;

public interface FunctionListener {
    
    void success(int state);

    
    void fail(Throwable throwable);
}

xml 布局代码




    

    

    






    



    



    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号