BasePresenter.java 2.95 KB
package com.sw.laryngoscope.base;

import android.os.Bundle;
import android.os.Looper;
import android.os.Message;

import com.sw.laryngoscope.utils.Logger;

import org.jetbrains.annotations.Nullable;

/**
 * @Description 这里用一句话描述
 * @Author
 * @Time 2019/05/29
 */
public abstract class BasePresenter<V extends BaseView> /*implements RxDataCallBack*/ {
    private V view;
    protected String TAG = "";

    protected CmdHandler mCmdHandler;
    private Message msg, msgNomal;

    /**
     * Presenter被创建后调用
     *
     * @param savedState 被意外销毁后重建后的Bundle
     */
    public void onCreatePresenter(@Nullable Bundle savedState) {
        TAG = getClass().getSimpleName();
        Logger.i(TAG, "P onCreatePresenter");
        mCmdHandler = new CmdHandler(Looper.getMainLooper(), this);
    }

    public void attachView(V v) {
        if (v != null) {
            this.view = v;
        }
    }

    public V getView() {
        return view;
    }

    public void deAttachView() {
        if (view != null) {
            this.view = null;
        }
    }

    /**
     * Presenter被销毁时调用
     */
    public void onDestroyPresenter() {
        Logger.i(TAG, "P onDestroyPresenter " + this);
    }

    /**
     * 在Presenter意外销毁的时候被调用,它的调用时机和Activity、Fragment、View中的onSaveInstanceState时机相同
     *
     * @param outState
     */
    public void onSaveInstanceState(Bundle outState) {
        Logger.i("P onSaveInstanceState");
    }

    /**
     * 处理数据返回
     *
     * @param msg
     */
    public void handleCmdMsg(Message msg) {
        switch (msg.what) {
            default:
                break;
        }
    }

    /**
     * 发送msg
     *
     * @param what 消息类型
     */
    public void sendMsg(int what) {
        //msg = new Message();
        msg = Message.obtain();
        msg.what = what;
        mCmdHandler.sendMessage(msg);
    }

    /**
     * 发送msg
     *
     * @param what 消息类型
     * @param arg1 消息内容
     */
    public void sendMsg(int what, int arg1) {
        msg = Message.obtain();
        msg.what = what;
        msg.arg1 = arg1;
        mCmdHandler.sendMessage(msg);
    }

    /**
     * 发送msg
     *
     * @param what 消息类型
     * @param arg1 消息内容1
     * @param arg2 消息内容2
     */
    protected void sendMsg(int what, int arg1, int arg2) {
        msg = Message.obtain();
        msg.what = what;
        msg.arg1 = arg1;
        msg.arg2 = arg2;
        mCmdHandler.sendMessage(msg);
    }

    /**
     * 发送msg
     *
     * @param what 消息类型
     * @param obj  obj
     */
    protected void sendMsg(int what, Object obj) {
        msg = Message.obtain();
        msg.what = what;
        msg.obj = obj;
        mCmdHandler.sendMessage(msg);
    }

}