【BaseRVFragment】基于MVP+Dagger2+Retrofit+Rxjava框架之BaseRVFragment


一个基于recycleview的fragment的封装,基于mvp,dagger2,retrofit,以及rxjava

简单用法

  • 创建fragment继承BaseRVFragment
  • 泛型传入Presenter,以及数据bean,实现View层接口(展示信息方法)
  • 单列获取本类实例
  • 更多用法参见具体项目

功能


封装要点

  • 泛型传入Presenter继承BaseContract.BasePresenter(Presenter绑定与解绑),和数据bean对象。
  • 继承BaseFragment()。
  • 实现自己封装了的recycleview适配器加载更多,刷新和点击事件接口。
  • dagger2创建presenter,attahView绑定和onDestroyView销毁presenter。
  • initAdapter传入适配器及是否刷新加载更多。
  • 重写加载跟多,刷新方法,加载错误的方法

源码

package com.daqsoft.baseproject.base;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import com.daqsoft.baseproject.R;
import com.daqsoft.baseproject.component.AppComponent;
import com.daqsoft.baseproject.view.recycleview.EasyRecyclerView;
import com.daqsoft.baseproject.view.recycleview.adapter.OnLoadMoreListener;
import com.daqsoft.baseproject.view.recycleview.adapter.RecyclerArrayAdapter;
import com.daqsoft.baseproject.view.recycleview.swipe.OnRefreshListener;
import java.lang.reflect.Constructor;
import javax.inject.Inject;
import butterknife.BindView;

/**
 * Created by yanbo on 2017/5/26.
 * 基础BaseRecycleViewFragment
 * T2是数据类型
 */

public abstract class BaseRVFragment <T1 extends BaseContract.BasePresenter,T2> extends BaseFragment implements OnLoadMoreListener,OnRefreshListener,RecyclerArrayAdapter.OnItemClickListener{

    //控制器
    @Inject
    protected T1 mPresenter;

    //自己的recycleview
    @BindView(R.id.recyclerview)
    protected EasyRecyclerView mRecyclerView;
    protected RecyclerArrayAdapter<T2> mAdapter;

    protected int start = 0;
    protected int limit = 20;
    /**
     * [此方法不可再重写]
     *
     */
    @Override
    public void attachView() {
        if (mPresenter !=null){
            mPresenter.attachView(this);
        }
    }

    protected void initAdapter(boolean refreshable, boolean loadmoreable) {
        if (mRecyclerView != null) {
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getSupportActivity()));
            mRecyclerView.setItemDecoration(ContextCompat.getColor(activity, R.color.common_divider_narrow), 1, 0, 0);
            mRecyclerView.setAdapterWithProgress(mAdapter);
        }

        if (mAdapter != null) {
            mAdapter.setOnItemClickListener(this);
            mAdapter.setError(R.layout.common_error_view).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mAdapter.resumeMore();

                }
            });
            if (loadmoreable) {
                mAdapter.setMore(R.layout.common_more_view, this);
                mAdapter.setNoMore(R.layout.common_nomore_view);
            }
            if (refreshable && mRecyclerView != null) {
                mRecyclerView.setRefreshListener(this);
            }
        }
    }

    protected void initAdapter(Class<? extends RecyclerArrayAdapter<T2>> clazz, boolean refreshable, boolean loadmoreable) {
        mAdapter = (RecyclerArrayAdapter<T2>) createInstance(clazz);
        initAdapter(refreshable, loadmoreable);
    }

    public Object createInstance(Class<?> cls) {
        Object obj;
        try {
            Constructor c1 = cls.getDeclaredConstructor(Context.class);
            c1.setAccessible(true);
            obj = c1.newInstance(mContext);
        } catch (Exception e) {
            obj = null;
        }
        return obj;
    }

    @Override
    public void onLoadMore() {
    }

    @Override
    public void onRefresh() {
        mRecyclerView.setRefreshing(true);
    }


    protected void loaddingError() {
        if (mAdapter.getCount() < 1) { // 说明缓存也没有加载,那就显示errorview,如果有缓存,即使刷新失败也不显示error
            mAdapter.clear();
        }
        mAdapter.pauseMore();
        mRecyclerView.setRefreshing(false);
        mRecyclerView.showTipViewAndDelayClose("似乎没有网络哦");
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (mPresenter != null)
            mPresenter.detachView();
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值