diff --git a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
index 20c113f..cc2fde9 100644
--- a/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
+++ b/base/src/main/java/com/heyongrui/base/assist/ConfigConstants.java
@@ -43,6 +43,7 @@ public class ConfigConstants {
public static final String PATH_MODULE_PROVIDER = "/module/main/service";
//module2模块路由路径
public static final String PATH_MODULE2_PROVIDER = "/module2/main/service";
+ public static final String PATH_GANK = "/module2/gank";
public static final String PATH_WELFARE = "/module2/welfare";
public static final String PATH_ABOUT = "/module2/about";
public static final String PATH_ENCOURAGE = "/module2/encourage";
diff --git a/module2/src/main/AndroidManifest.xml b/module2/src/main/AndroidManifest.xml
index 17fcf66..23f4244 100644
--- a/module2/src/main/AndroidManifest.xml
+++ b/module2/src/main/AndroidManifest.xml
@@ -11,5 +11,8 @@
+
diff --git a/module2/src/main/debug/AndroidManifest.xml b/module2/src/main/debug/AndroidManifest.xml
index 8621400..b48cbb0 100644
--- a/module2/src/main/debug/AndroidManifest.xml
+++ b/module2/src/main/debug/AndroidManifest.xml
@@ -27,6 +27,9 @@
+
diff --git a/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java b/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
index 579c814..6a51e69 100644
--- a/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
+++ b/module2/src/main/java/com/heyongrui/module2/Module2Fragment.java
@@ -125,6 +125,9 @@ private void initBalls() {
case 1://福利
ARouter.getInstance().build(ConfigConstants.PATH_WELFARE).navigation();
break;
+ case 2://Android
+ ARouter.getInstance().build(ConfigConstants.PATH_GANK).withInt("type", 1).navigation();
+ break;
case 9://关于
ARouter.getInstance().build(ConfigConstants.PATH_ABOUT).navigation();
break;
diff --git a/module2/src/main/java/com/heyongrui/module2/dagger/ActivityContext.java b/module2/src/main/java/com/heyongrui/module2/dagger/ActivityContext.java
new file mode 100644
index 0000000..4a8d4d1
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/dagger/ActivityContext.java
@@ -0,0 +1,12 @@
+package com.heyongrui.module2.dagger;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ActivityContext {
+
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java
new file mode 100644
index 0000000..43d6a58
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Component.java
@@ -0,0 +1,27 @@
+package com.heyongrui.module2.dagger;
+
+import android.app.Activity;
+
+import androidx.fragment.app.Fragment;
+
+import com.heyongrui.base.dagger.AppComponent;
+import com.heyongrui.base.dagger.PerActivity;
+import com.heyongrui.module2.gank.presenter.GankPresenter;
+
+import dagger.Component;
+
+/**
+ * 2019/8/26
+ * lambert
+ * 此Component依赖AppComponent,由于AppComponent使用了@Singleton,此处只能使用自定义@Scope(@PerActivity)
+ */
+
+@PerActivity
+@Component(dependencies = AppComponent.class, modules = {Module2Module.class})
+public interface Module2Component {
+ Activity getActivity();
+
+ Fragment getFragment();
+
+ void inject(GankPresenter gankPresenter);
+}
diff --git a/module2/src/main/java/com/heyongrui/module2/dagger/Module2Module.java b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Module.java
new file mode 100644
index 0000000..5d1024d
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/dagger/Module2Module.java
@@ -0,0 +1,62 @@
+package com.heyongrui.module2.dagger;
+
+
+import android.app.Activity;
+import android.content.Context;
+
+import androidx.fragment.app.Fragment;
+
+import com.heyongrui.base.dagger.PerActivity;
+import com.heyongrui.module2.data.service.GankService;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module
+public class Module2Module {
+
+ private Activity mActivity;
+ private Fragment mFragment;
+
+ public Module2Module() {
+ }
+
+ public Module2Module(Activity activity) {
+ mActivity = activity;
+ }
+
+ public Module2Module(Fragment fragment) {
+ this.mFragment = fragment;
+ }
+
+ @Provides
+ Activity provideActivity() {
+ return mActivity;
+ }
+
+ @Provides
+ Fragment provideFragment() {
+ return mFragment;
+ }
+
+ /*
+ * @ActivityContext别名,通过在@Inject时加入这个自定义注解达到返回相同provider类型但是数据不同(eg:User() User(int age))
+ */
+ @Provides
+ @ActivityContext
+ Context providesContext() {
+ Context context = null;
+ if (null != mActivity) {
+ context = mActivity;
+ } else if (null != mFragment) {
+ context = mFragment.getContext();
+ }
+ return context;
+ }
+
+ @Provides
+ @PerActivity
+ GankService provideGankService() {
+ return new GankService();
+ }
+}
diff --git a/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java b/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
index bab7369..2356235 100644
--- a/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
+++ b/module2/src/main/java/com/heyongrui/module2/data/api/GankApi.java
@@ -12,6 +12,6 @@
public interface GankApi {
- @GET("data/福利/{per_page}/{page}")
- Observable getWelfare(@Path("per_page") int per_page, @Path("page") int page);
+ @GET("data/{category}/{per_page}/{page}")
+ Observable getGankCategory(@Path("category") String category, @Path("per_page") int per_page, @Path("page") int page);
}
diff --git a/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java b/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
index e68ec33..6c46e49 100644
--- a/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
+++ b/module2/src/main/java/com/heyongrui/module2/data/service/GankService.java
@@ -21,7 +21,13 @@ public GankService() {
public Observable getWelfare(int perPage, int page) {
return ApiService.createApi(GankApi.class, BASE_URL_GANK)
- .getWelfare(perPage, page)
+ .getGankCategory("福利", perPage, page)
+ .compose(RxHelper.rxSchedulerHelper());
+ }
+
+ public Observable getAndroid(int perPage, int page) {
+ return ApiService.createApi(GankApi.class, BASE_URL_GANK)
+ .getGankCategory("Android", perPage, page)
.compose(RxHelper.rxSchedulerHelper());
}
}
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt b/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt
new file mode 100644
index 0000000..7624976
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/contract/GankContract.kt
@@ -0,0 +1,27 @@
+package com.heyongrui.module2.gank.contract
+
+import androidx.recyclerview.widget.RecyclerView
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.heyongrui.base.base.BasePresenter
+import com.heyongrui.base.base.BaseView
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.data.dto.WelfareDto
+import com.scwang.smartrefresh.header.StoreHouseHeader
+import com.scwang.smartrefresh.layout.SmartRefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+
+interface GankContract {
+ interface View : BaseView {
+ fun getAndroidSuccess(welfareDto: WelfareDto)
+
+ fun getAndroidFail(errorCode: Int, errorMsg: String)
+ }
+
+ abstract class Presenter : BasePresenter() {
+ abstract fun initSwipeRefresh(smartRefreshLayout: SmartRefreshLayout, storeHouseHeader: StoreHouseHeader, onRefreshLoadMoreListener: OnRefreshLoadMoreListener)
+
+ abstract fun initRecyclerView(recyclerView: RecyclerView, listener: BaseQuickAdapter.OnItemClickListener): Module2SectionAdapter
+
+ abstract fun getAndroid(perPage: Int, page: Int)
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt b/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt
new file mode 100644
index 0000000..8dfbbf8
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/presenter/GankPresenter.kt
@@ -0,0 +1,74 @@
+package com.heyongrui.module2.gank.presenter
+
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.blankj.utilcode.util.ConvertUtils
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.heyongrui.base.app.BaseApplication
+import com.heyongrui.base.widget.itemdecoration.RecycleViewItemDecoration
+import com.heyongrui.module2.R
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.adapter.Module2SectionEntity
+import com.heyongrui.module2.dagger.DaggerModule2Component
+import com.heyongrui.module2.dagger.Module2Module
+import com.heyongrui.module2.data.dto.WelfareDto
+import com.heyongrui.module2.data.service.GankService
+import com.heyongrui.module2.gank.contract.GankContract
+import com.heyongrui.network.configure.ResponseDisposable
+import com.scwang.smartrefresh.header.StoreHouseHeader
+import com.scwang.smartrefresh.layout.SmartRefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+import java.util.*
+import javax.inject.Inject
+
+class GankPresenter : GankContract.Presenter() {
+
+ @Inject
+ lateinit var mGankService: GankService
+
+ init {
+ DaggerModule2Component.builder().appComponent(BaseApplication.getAppComponent()).module2Module(Module2Module()).build().inject(this)
+ }
+
+ override fun initSwipeRefresh(smartRefreshLayout: SmartRefreshLayout, storeHouseHeader: StoreHouseHeader, onRefreshLoadMoreListener: OnRefreshLoadMoreListener) {
+ storeHouseHeader.setTextColor(ContextCompat.getColor(mContext, R.color.white))
+ smartRefreshLayout.setPrimaryColors(ContextCompat.getColor(mContext, R.color.colorPrimaryDark))
+ smartRefreshLayout.setDisableContentWhenRefresh(true)//是否在刷新的时候禁止列表的操作
+ smartRefreshLayout.setDisableContentWhenLoading(true)//是否在加载的时候禁止列表的操作
+ smartRefreshLayout.setEnableNestedScroll(true)
+ smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(true)
+ smartRefreshLayout.setOnRefreshLoadMoreListener(onRefreshLoadMoreListener)
+ }
+
+ override fun initRecyclerView(recyclerView: RecyclerView, listener: BaseQuickAdapter.OnItemClickListener): Module2SectionAdapter {
+ val data = ArrayList()
+ val moduleSectionAdapter = Module2SectionAdapter(data)
+ recyclerView.layoutManager = LinearLayoutManager(mContext)
+ moduleSectionAdapter.bindToRecyclerView(recyclerView)
+ val dp10 = ConvertUtils.dp2px(10f)
+ recyclerView.addItemDecoration(RecycleViewItemDecoration(mContext, dp10))
+ moduleSectionAdapter.setSpanSizeLookup({ gridLayoutManager, position -> data[position].getSpanSize() })
+ if (null != listener) {
+ moduleSectionAdapter.setOnItemClickListener(listener)
+ }
+ return moduleSectionAdapter
+ }
+
+ override fun getAndroid(perPage: Int, page: Int) {
+ mRxManager.add(mGankService.getAndroid(perPage, page).subscribeWith(
+ object : ResponseDisposable(mContext, true) {
+ override fun onSuccess(welfareDto: WelfareDto) {
+ if (mView != null) {
+ mView.getAndroidSuccess(welfareDto)
+ }
+ }
+
+ override fun onFailure(errorCode: Int, errorMsg: String) {
+ if (mView != null) {
+ mView.getAndroidFail(errorCode, errorMsg)
+ }
+ }
+ }))
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt b/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt
new file mode 100644
index 0000000..1c9d827
--- /dev/null
+++ b/module2/src/main/java/com/heyongrui/module2/gank/view/GankActivity.kt
@@ -0,0 +1,119 @@
+package com.heyongrui.module2.gank.view
+
+import android.os.Bundle
+import android.view.View
+import androidx.core.content.ContextCompat
+import com.alibaba.android.arouter.facade.annotation.Autowired
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.blankj.utilcode.util.ToastUtils
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.heyongrui.base.assist.ConfigConstants
+import com.heyongrui.base.base.BaseActivity
+import com.heyongrui.base.utils.DrawableUtil
+import com.heyongrui.module2.R
+import com.heyongrui.module2.adapter.Module2SectionAdapter
+import com.heyongrui.module2.adapter.Module2SectionEntity
+import com.heyongrui.module2.data.dto.WelfareDto
+import com.heyongrui.module2.gank.contract.GankContract
+import com.heyongrui.module2.gank.presenter.GankPresenter
+import com.scwang.smartrefresh.layout.api.RefreshLayout
+import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener
+import kotlinx.android.synthetic.main.activity_gank.*
+import java.util.*
+
+@Route(path = ConfigConstants.PATH_GANK)
+class GankActivity : BaseActivity(), GankContract.View, View.OnClickListener, BaseQuickAdapter.OnItemClickListener, OnRefreshLoadMoreListener {
+
+ @JvmField
+ @Autowired(name = "type")
+ var mType: Int = 0
+
+ private val mPerPage = 10
+ private var mPage = 1
+ private var mIsLastPage: Boolean = false
+ lateinit var mGankAdapter: Module2SectionAdapter
+
+ override fun initImmersionBar() {
+ super.initImmersionBar()
+// ImmersionBar.with(this).fullScreen(true).hideBar(BarHide.FLAG_HIDE_BAR).init()
+ }
+
+ override fun setPresenter(): GankContract.Presenter {
+ return GankPresenter()
+ }
+
+ override fun onClick(p0: View?) {
+ if (p0 != null) {
+ if (p0 == iv_back) {
+ finish()
+ }
+ }
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.activity_gank;
+ }
+
+ override fun init(savedInstanceState: Bundle?) {
+ addOnClickListeners(this@GankActivity, iv_back)
+
+ val tintDrawable = DrawableUtil.tintDrawable(this@GankActivity, R.drawable.ic_back, ContextCompat.getColor(this@GankActivity, R.color.background))
+ iv_back.setImageDrawable(tintDrawable)
+
+ mPresenter.initSwipeRefresh(refresh_layout, store_house_header, this@GankActivity)
+ mGankAdapter = mPresenter.initRecyclerView(rlv_gank, this@GankActivity)
+
+ refresh_layout.autoRefresh()
+ }
+
+ private fun loadData() {
+ mPresenter.getAndroid(mPerPage, mPage)
+ }
+
+ override fun onLoadMore(refreshLayout: RefreshLayout) {
+ }
+
+ override fun onRefresh(refreshLayout: RefreshLayout) {
+ loadData()
+ }
+
+ override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {
+
+ }
+
+ override fun getAndroidSuccess(welfareDto: WelfareDto) {
+ resetRefreshLayout(true, true, false)
+ val addDataList = ArrayList()
+ if (welfareDto != null) {
+ if (!welfareDto.isError) {
+ val welfareBeanList = welfareDto.results
+ if (welfareBeanList != null && !welfareBeanList.isEmpty()) {
+ if (welfareBeanList.size < mPerPage) {
+ mIsLastPage = true
+ }
+ for (welfareBean in welfareBeanList) {
+ addDataList.add(Module2SectionEntity(Module2SectionEntity.WELFARE, welfareBean))
+ }
+ } else {
+ mIsLastPage = true
+ }
+ }
+ }
+ mGankAdapter.replaceData(addDataList)
+ }
+
+ override fun getAndroidFail(errorCode: Int, errorMsg: String) {
+ ToastUtils.showShort(errorMsg)
+ resetRefreshLayout(true, true, false)
+ }
+
+ private fun resetRefreshLayout(isFinishLoadMore: Boolean, isFinishRefresh: Boolean, noMoreData: Boolean) {
+ if (isFinishLoadMore) {
+ refresh_layout.finishLoadMore()
+ }
+ if (isFinishRefresh) {
+ refresh_layout.finishRefresh()
+ }
+ refresh_layout.setNoMoreData(noMoreData)
+ }
+}
\ No newline at end of file
diff --git a/module2/src/main/res/layout/activity_gank.xml b/module2/src/main/res/layout/activity_gank.xml
new file mode 100644
index 0000000..13f0e1a
--- /dev/null
+++ b/module2/src/main/res/layout/activity_gank.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file