MVP框架

View层

package com.example.framework;

public interface IBaseView {

    void showLoading();

    void hideLoading();

    void showToast(String msg);

}

Presenter层

package com.example.framework;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;

public class BasePresenter<V> {

    private List<Disposable> disposableList = new ArrayList<>();
    protected V iView;

    protected synchronized void add(Disposable disposable) {
        disposableList.add(disposable);
    }

    protected void attachView(V iView) {
        this.iView = iView;
    }

    protected void detachView() {
        this.iView = null;

        for (Disposable disposable : disposableList) {
            if (disposable.isDisposed()) {
                disposable.dispose();
            }
        }
    }
}

BaseActivity类

package com.example.framework;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.framework.manager.NetworkConnectionsManager;
import com.example.framework.view.LoadingPage;
import com.example.framework.view.ToolBar;

public abstract class BaseActivity<T extends BasePresenter> extends AppCompatActivity implements ToolBar.IToolbarListener, NetworkConnectionsManager.IConnectListener {

    protected T httpPresenter;
    protected boolean isUseLoading = true;
    protected LoadingPage loadingPage;
    protected ToolBar toolBar;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        loadingPage = new LoadingPage(this) {
            @Override
            protected int getSuccessLayoutId() {
                return getLayoutId();
            }
        };
        setContentView(loadingPage);
        NetworkConnectionsManager.getInstance().registerConnectListener(this);
        initView();
        toolBar = findViewById(R.id.toolbar);
        toolBar.setToolbarListener(this);
        initPresenter();
        initData();
        initListener();
    }

    protected abstract void initPresenter();

    protected abstract void initData();

    protected abstract void initView();

    protected abstract int getLayoutId();

    protected  void initListener(){
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        destroy();
    }

    public void destroy() {
        if (httpPresenter != null) {
            httpPresenter.detachView();
        }
        NetworkConnectionsManager.getInstance().unRegisterConnectListener(this);
    }

    @Override
    public void onLeftClick() {
        finish();
    }
    @Override
    public void onRightImgClick() {

    }

    @Override
    public void onRightTvClick() {

    }
    @Override
    public void onConnected() {

    }

    @Override
    public void onDisconnected() {

    }
}

BaseFragment类

package com.example.framework;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.framework.manager.NetworkConnectionsManager;
import com.example.framework.view.LoadingPage;
import com.example.framework.view.ToolBar;

public abstract class BaseFragment<T extends BasePresenter> extends Fragment implements ToolBar.IToolbarListener, NetworkConnectionsManager.IConnectListener {

    protected T httpPresenter;
    protected View mBaseView;
    protected ToolBar toolBar;
    protected LoadingPage loadingPage;
    protected boolean isUseLoading = true;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        initView();
        toolBar = mBaseView.findViewById(R.id.toolbar);
        toolBar.setToolbarListener(this);
        NetworkConnectionsManager.getInstance().registerConnectListener(this);
        initPresenter();
        initData();
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mBaseView = loadingPage = new LoadingPage(getActivity()) {
            @Override
            protected int getSuccessLayoutId() {
                return getLayoutId();
            }
        };

        mBaseView.findViewById(getLayoutId());

        return mBaseView;
    }


    protected abstract void initPresenter();

    protected abstract void initData();

    protected abstract void initView();

    protected abstract int getLayoutId();

    @Override
    public void onDestroy() {
        super.onDestroy();
        destroy();
    }

    public void destroy() {
        if (httpPresenter != null) {
            httpPresenter.detachView();
        }
        NetworkConnectionsManager.getInstance().unRegisterConnectListener(this);
    }

    @Override
    public void onLeftClick() {

    }

    @Override
    public void onRightImgClick() {

    }

    @Override
    public void onRightTvClick() {

    }
    @Override
    public void onConnected() {

    }

    @Override
    public void onDisconnected() {
        loadingPage.showError("网络错误");
    }
}

IHomeView获取数据

package com.example.shoppingmallsix.fragment.home;

import com.example.framework.IBaseView;
import com.example.net.bean.HomeBean;

public interface IHomeView  extends IBaseView {

    void getHomeData(HomeBean homeBean);

}

HomePresenter 获取数据

package com.example.shoppingmallsix.fragment.home;
import com.example.framework.BasePresenter;
import com.example.net.RetrofitCreator;
import com.example.net.bean.HomeBean;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

public class HomePresenter extends BasePresenter<IHomeView> {

    public HomePresenter(IHomeView iHomeView) {
        attachView(iHomeView);
    }

    public void getHomeDData() {

        RetrofitCreator.getFiannceApiService().getHoemData()
                .delay(2, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        add(disposable);
                        iView.showLoading();
                    }
                })
                .doFinally(new Action() {
                    @Override
                    public void run() throws Exception {
                        iView.hideLoading();
                    }
                })
                .subscribe(new Observer<HomeBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(HomeBean homeBean) {
                        if (iView != null) {
                            iView.getHomeData(homeBean);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        if (iView != null) {
                            iView.showToast(e.getMessage());
                        }
                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }

}

页面展示

package com.example.shoppingmallsix.fragment.home;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.framework.BaseFragment;
import com.example.framework.manager.LogUtil;
import com.example.framework.manager.MessageManager;
import com.example.framework.view.ToolBar;
import com.example.net.bean.HomeBean;
import com.example.shoppingmallsix.BuildConfig;
import com.example.shoppingmallsix.R;
import com.example.shoppingmallsix.adapter.HomeAdapter;
import com.example.shoppingmallsix.message.MessageActivity;
import com.umeng.message.PushAgent;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

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

/**
 * A simple {@link Fragment} subclass.
 */
public class HomeFragment extends BaseFragment<HomePresenter> implements IHomeView,MessageManager.IMessage {
    private ToolBar toolbar;
    private EditText edtname;
    private RecyclerView rv;
    private HomeAdapter homeAdapter;
    private HomePresenter homePresenter;
    private List<Object> list = new ArrayList<>();
    private LinearLayout homeMessage;
    private TextView messageTv;

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    protected void initPresenter() {
        homePresenter = new HomePresenter(this);
    }

    @Override
    protected void initData() {

        MessageManager.getInstance().register(this::onMessage);

        homePresenter.getHomeDData();

    }

    @Override
    protected void initView() {
        toolbar = (ToolBar) mBaseView.findViewById(R.id.toolbar);
        edtname = (EditText) mBaseView.findViewById(R.id.edtname);
        rv = (RecyclerView) mBaseView.findViewById(R.id.rv);
        homeMessage = mBaseView.findViewById(R.id.homeMessage);
        messageTv = mBaseView.findViewById(R.id.messageTv);
        PushAgent.getInstance(getContext()).onAppStart();
        homeAdapter = new HomeAdapter(list, getActivity());
        rv.setLayoutManager(new LinearLayoutManager(getContext()));
        rv.setAdapter(homeAdapter);

        homeMessage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), MessageActivity.class);
                startActivity(intent);
            }
        });
}

    @Override
    protected int getLayoutId() {
        return R.layout.fragment_home;
    }

    @Override
    public void getHomeData(HomeBean homeBean) {
        HomeBean.ResultBean result = homeBean.getResult();

        int count = MessageManager.getInstance().getCount();
        setCount(count);

        if (BuildConfig.DEBUG) Log.d("HomeFragment", "homeBean:" + homeBean);
        list.add(result.getBanner_info());
        list.add(result.getChannel_info());
        list.add(result.getAct_info());
        list.add(result.getSeckill_info().getList());
        list.add(result.getRecommend_info());
        list.add(result.getHot_info());

        loadingPage.showSuccessView();

        homeAdapter.notifyDataSetChanged();
    }

    @Override
    public void showLoading() {
        loadingPage.showTransparentLoadingView();
    }

    @Override
    public void hideLoading() {
    }

    @Override
    public void showToast(String msg) {
        loadingPage.showError(msg);
    }

    @Override
    public void onMessage(int count) {
        setCount(count);
    }

    public void setCount(int count){
        if (count<=0){
            messageTv.setText("消息");
        }else {
            messageTv.setText(count+"");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值