diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java index 430b7b7..60ec154 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java @@ -7,5 +7,5 @@ void hideProgress(); - void obtainCaseStatusData(CaseListResultBean resultBean); + void obtainCaseListData(CaseListResultBean resultBean); } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java index 430b7b7..60ec154 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java @@ -7,5 +7,5 @@ void hideProgress(); - void obtainCaseStatusData(CaseListResultBean resultBean); + void obtainCaseListData(CaseListResultBean resultBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index c11de8d..f581970 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -1,8 +1,11 @@ package com.casic.dcms.ui; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.view.View; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; @@ -12,26 +15,51 @@ import com.casic.dcms.adapter.CaseListResultAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseListResultBean; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; +import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; +import com.casic.dcms.mvp.view.ICaseListView; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.lang.reflect.Type; +import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; -public class CaseListResultActivity extends BaseActivity { +public class CaseListResultActivity extends BaseActivity implements ICaseListView { private static final String TAG = "CaseListResultActivity"; @BindView(R.id.caseTopLayout) QMUITopBarLayout caseTopLayout; @BindView(R.id.emptyView) QMUIEmptyView emptyView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.caseRecyclerView) RecyclerView caseRecyclerView; + private CaseListPresenterImpl caseListPresenter; + private QMUITipDialog loadingDialog; + private CaseListResultAdapter adapter; + private String typeCode; + private String typeDetailCode; + private String statusId; + private String startTime; + private String endTime; + private String eorc; + private int pageIndex = 0; + /** + * 临时存储网络请求到的数据 + */ + private List dataBeans = new ArrayList<>(); + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + @Override public int initLayoutView() { return R.layout.activity_case_list; @@ -51,33 +79,126 @@ @Override public void initData() { - Gson gson = new Gson(); - String resultBeanJson = getIntent().getStringExtra("resultBeanJson"); - Type type = new TypeToken() { - }.getType(); - CaseListResultBean resultBean = gson.fromJson(resultBeanJson, type); - List dataRows = resultBean.getData().getRows(); - if (dataRows.size() == 0) { - emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); - } else { - emptyView.hide(); - CaseListResultAdapter adapter = new CaseListResultAdapter(this, dataRows); - caseRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - caseRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); - caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - Intent intent = new Intent(CaseListResultActivity.this, CaseDetailActivity.class); - intent.putExtra("id", dataRows.get(position).getId()); - startActivity(intent); - } - }); - } + caseListPresenter = new CaseListPresenterImpl(this); + weakReferenceHandler = new WeakReferenceHandler(this); + typeCode = getIntent().getStringExtra("typeCode"); + typeDetailCode = getIntent().getStringExtra("typeDetailCode"); + statusId = getIntent().getStringExtra("statusId"); + startTime = getIntent().getStringExtra("startTime"); + endTime = getIntent().getStringExtra("endTime"); + eorc = getIntent().getStringExtra("eorc"); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("案卷查询中,请稍后") + .create(); + + //加载第一页 + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @Override public void initEvent() { + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 0; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CaseListResultActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CaseListResultActivity resultActivity = reference.get(); + if (msg.what == 20210425) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new CaseListResultAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.caseRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.caseRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.caseRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + Intent intent = new Intent(resultActivity, CaseDetailActivity.class); + intent.putExtra("id", resultActivity.dataBeans.get(position).getId()); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + public void showProgress() { + loadingDialog.show(); + } + + @Override + public void obtainCaseListData(CaseListResultBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + for (int i = 0; i < dataRows.size(); i++) { + dataBeans.add(0, dataRows.get(i)); + } + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + //更新RecyclerView + weakReferenceHandler.sendEmptyMessage(20210425); + } + } + + @Override + public void hideProgress() { + loadingDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseListPresenter != null) { + caseListPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java index 430b7b7..60ec154 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java @@ -7,5 +7,5 @@ void hideProgress(); - void obtainCaseStatusData(CaseListResultBean resultBean); + void obtainCaseListData(CaseListResultBean resultBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index c11de8d..f581970 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -1,8 +1,11 @@ package com.casic.dcms.ui; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.view.View; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; @@ -12,26 +15,51 @@ import com.casic.dcms.adapter.CaseListResultAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseListResultBean; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; +import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; +import com.casic.dcms.mvp.view.ICaseListView; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.lang.reflect.Type; +import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; -public class CaseListResultActivity extends BaseActivity { +public class CaseListResultActivity extends BaseActivity implements ICaseListView { private static final String TAG = "CaseListResultActivity"; @BindView(R.id.caseTopLayout) QMUITopBarLayout caseTopLayout; @BindView(R.id.emptyView) QMUIEmptyView emptyView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.caseRecyclerView) RecyclerView caseRecyclerView; + private CaseListPresenterImpl caseListPresenter; + private QMUITipDialog loadingDialog; + private CaseListResultAdapter adapter; + private String typeCode; + private String typeDetailCode; + private String statusId; + private String startTime; + private String endTime; + private String eorc; + private int pageIndex = 0; + /** + * 临时存储网络请求到的数据 + */ + private List dataBeans = new ArrayList<>(); + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + @Override public int initLayoutView() { return R.layout.activity_case_list; @@ -51,33 +79,126 @@ @Override public void initData() { - Gson gson = new Gson(); - String resultBeanJson = getIntent().getStringExtra("resultBeanJson"); - Type type = new TypeToken() { - }.getType(); - CaseListResultBean resultBean = gson.fromJson(resultBeanJson, type); - List dataRows = resultBean.getData().getRows(); - if (dataRows.size() == 0) { - emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); - } else { - emptyView.hide(); - CaseListResultAdapter adapter = new CaseListResultAdapter(this, dataRows); - caseRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - caseRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); - caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - Intent intent = new Intent(CaseListResultActivity.this, CaseDetailActivity.class); - intent.putExtra("id", dataRows.get(position).getId()); - startActivity(intent); - } - }); - } + caseListPresenter = new CaseListPresenterImpl(this); + weakReferenceHandler = new WeakReferenceHandler(this); + typeCode = getIntent().getStringExtra("typeCode"); + typeDetailCode = getIntent().getStringExtra("typeDetailCode"); + statusId = getIntent().getStringExtra("statusId"); + startTime = getIntent().getStringExtra("startTime"); + endTime = getIntent().getStringExtra("endTime"); + eorc = getIntent().getStringExtra("eorc"); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("案卷查询中,请稍后") + .create(); + + //加载第一页 + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @Override public void initEvent() { + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 0; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CaseListResultActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CaseListResultActivity resultActivity = reference.get(); + if (msg.what == 20210425) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new CaseListResultAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.caseRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.caseRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.caseRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + Intent intent = new Intent(resultActivity, CaseDetailActivity.class); + intent.putExtra("id", resultActivity.dataBeans.get(position).getId()); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + public void showProgress() { + loadingDialog.show(); + } + + @Override + public void obtainCaseListData(CaseListResultBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + for (int i = 0; i < dataRows.size(); i++) { + dataBeans.add(0, dataRows.get(i)); + } + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + //更新RecyclerView + weakReferenceHandler.sendEmptyMessage(20210425); + } + } + + @Override + public void hideProgress() { + loadingDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseListPresenter != null) { + caseListPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index a4740ac..30762e9 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -10,28 +10,23 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; -import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; -import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseStatusPresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; -import com.casic.dcms.mvp.view.ICaseListView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; -import com.google.gson.Gson; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.List; @@ -40,7 +35,7 @@ import butterknife.OnClick; public class CaseSearchActivity extends BaseActivity implements View.OnClickListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView, ICaseListView { + ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView { private static final String TAG = "CaseSearchActivity"; private Context context = this; @@ -68,13 +63,10 @@ private CaseSmallClassPresenterImpl caseSmallClassPresenter; private List smallClassBeans; private CaseStatusPresenterImpl caseStatusPresenter; - private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; - private String eorc; - private String typeDetailCode; private String typeCode; - private Gson gson; + private String typeDetailCode; private String statusId; + private String eorc; @Override public int initLayoutView() { @@ -98,18 +90,12 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseStatusPresenter = new CaseStatusPresenterImpl(this); - caseListPresenter = new CaseListPresenterImpl(this); } @Override public void initEvent() { searchButton.setChangeAlphaWhenPress(true); resetButton.setChangeAlphaWhenPress(true); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); - gson = new Gson(); } @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.caseStatusLayout, @@ -131,8 +117,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -218,9 +203,14 @@ }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: - caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, - startTimeView.getText().toString(), endTimeView.getText().toString(), - eorc, 20, 0); + Intent intent = new Intent(this, CaseListResultActivity.class); + intent.putExtra("typeCode", typeCode); + intent.putExtra("typeDetailCode", typeDetailCode); + intent.putExtra("statusId", statusId); + intent.putExtra("startTime", startTimeView.getText().toString()); + intent.putExtra("endTime", endTimeView.getText().toString()); + intent.putExtra("eorc", eorc); + startActivity(intent); break; case R.id.resetButton: new QMUIDialog.MessageDialogBuilder(context) @@ -302,26 +292,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void obtainCaseStatusData(CaseListResultBean resultBean) { -// Log.d(TAG, "obtainCaseStatusData: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - Intent intent = new Intent(this, CaseListResultActivity.class); - intent.putExtra("resultBeanJson", gson.toJson(resultBean)); - startActivity(intent); - } - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseLargeClassPresenter != null) { @@ -333,8 +303,5 @@ if (caseStatusPresenter != null) { caseStatusPresenter.disposeRetrofitRequest(); } - if (caseListPresenter != null) { - caseListPresenter.disposeRetrofitRequest(); - } } } diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java index 430b7b7..60ec154 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java @@ -7,5 +7,5 @@ void hideProgress(); - void obtainCaseStatusData(CaseListResultBean resultBean); + void obtainCaseListData(CaseListResultBean resultBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index c11de8d..f581970 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -1,8 +1,11 @@ package com.casic.dcms.ui; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.view.View; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; @@ -12,26 +15,51 @@ import com.casic.dcms.adapter.CaseListResultAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseListResultBean; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; +import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; +import com.casic.dcms.mvp.view.ICaseListView; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.lang.reflect.Type; +import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; -public class CaseListResultActivity extends BaseActivity { +public class CaseListResultActivity extends BaseActivity implements ICaseListView { private static final String TAG = "CaseListResultActivity"; @BindView(R.id.caseTopLayout) QMUITopBarLayout caseTopLayout; @BindView(R.id.emptyView) QMUIEmptyView emptyView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.caseRecyclerView) RecyclerView caseRecyclerView; + private CaseListPresenterImpl caseListPresenter; + private QMUITipDialog loadingDialog; + private CaseListResultAdapter adapter; + private String typeCode; + private String typeDetailCode; + private String statusId; + private String startTime; + private String endTime; + private String eorc; + private int pageIndex = 0; + /** + * 临时存储网络请求到的数据 + */ + private List dataBeans = new ArrayList<>(); + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + @Override public int initLayoutView() { return R.layout.activity_case_list; @@ -51,33 +79,126 @@ @Override public void initData() { - Gson gson = new Gson(); - String resultBeanJson = getIntent().getStringExtra("resultBeanJson"); - Type type = new TypeToken() { - }.getType(); - CaseListResultBean resultBean = gson.fromJson(resultBeanJson, type); - List dataRows = resultBean.getData().getRows(); - if (dataRows.size() == 0) { - emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); - } else { - emptyView.hide(); - CaseListResultAdapter adapter = new CaseListResultAdapter(this, dataRows); - caseRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - caseRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); - caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - Intent intent = new Intent(CaseListResultActivity.this, CaseDetailActivity.class); - intent.putExtra("id", dataRows.get(position).getId()); - startActivity(intent); - } - }); - } + caseListPresenter = new CaseListPresenterImpl(this); + weakReferenceHandler = new WeakReferenceHandler(this); + typeCode = getIntent().getStringExtra("typeCode"); + typeDetailCode = getIntent().getStringExtra("typeDetailCode"); + statusId = getIntent().getStringExtra("statusId"); + startTime = getIntent().getStringExtra("startTime"); + endTime = getIntent().getStringExtra("endTime"); + eorc = getIntent().getStringExtra("eorc"); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("案卷查询中,请稍后") + .create(); + + //加载第一页 + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @Override public void initEvent() { + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 0; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CaseListResultActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CaseListResultActivity resultActivity = reference.get(); + if (msg.what == 20210425) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new CaseListResultAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.caseRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.caseRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.caseRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + Intent intent = new Intent(resultActivity, CaseDetailActivity.class); + intent.putExtra("id", resultActivity.dataBeans.get(position).getId()); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + public void showProgress() { + loadingDialog.show(); + } + + @Override + public void obtainCaseListData(CaseListResultBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + for (int i = 0; i < dataRows.size(); i++) { + dataBeans.add(0, dataRows.get(i)); + } + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + //更新RecyclerView + weakReferenceHandler.sendEmptyMessage(20210425); + } + } + + @Override + public void hideProgress() { + loadingDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseListPresenter != null) { + caseListPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index a4740ac..30762e9 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -10,28 +10,23 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; -import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; -import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseStatusPresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; -import com.casic.dcms.mvp.view.ICaseListView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; -import com.google.gson.Gson; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.List; @@ -40,7 +35,7 @@ import butterknife.OnClick; public class CaseSearchActivity extends BaseActivity implements View.OnClickListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView, ICaseListView { + ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView { private static final String TAG = "CaseSearchActivity"; private Context context = this; @@ -68,13 +63,10 @@ private CaseSmallClassPresenterImpl caseSmallClassPresenter; private List smallClassBeans; private CaseStatusPresenterImpl caseStatusPresenter; - private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; - private String eorc; - private String typeDetailCode; private String typeCode; - private Gson gson; + private String typeDetailCode; private String statusId; + private String eorc; @Override public int initLayoutView() { @@ -98,18 +90,12 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseStatusPresenter = new CaseStatusPresenterImpl(this); - caseListPresenter = new CaseListPresenterImpl(this); } @Override public void initEvent() { searchButton.setChangeAlphaWhenPress(true); resetButton.setChangeAlphaWhenPress(true); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); - gson = new Gson(); } @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.caseStatusLayout, @@ -131,8 +117,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -218,9 +203,14 @@ }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: - caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, - startTimeView.getText().toString(), endTimeView.getText().toString(), - eorc, 20, 0); + Intent intent = new Intent(this, CaseListResultActivity.class); + intent.putExtra("typeCode", typeCode); + intent.putExtra("typeDetailCode", typeDetailCode); + intent.putExtra("statusId", statusId); + intent.putExtra("startTime", startTimeView.getText().toString()); + intent.putExtra("endTime", endTimeView.getText().toString()); + intent.putExtra("eorc", eorc); + startActivity(intent); break; case R.id.resetButton: new QMUIDialog.MessageDialogBuilder(context) @@ -302,26 +292,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void obtainCaseStatusData(CaseListResultBean resultBean) { -// Log.d(TAG, "obtainCaseStatusData: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - Intent intent = new Intent(this, CaseListResultActivity.class); - intent.putExtra("resultBeanJson", gson.toJson(resultBean)); - startActivity(intent); - } - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseLargeClassPresenter != null) { @@ -333,8 +303,5 @@ if (caseStatusPresenter != null) { caseStatusPresenter.disposeRetrofitRequest(); } - if (caseListPresenter != null) { - caseListPresenter.disposeRetrofitRequest(); - } } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index d24478f..114e8e3 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -202,11 +202,11 @@ */ public static Observable getCaseListResult(String casetypeCode, String casetypeDetailCode, String caseStateId, String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset) { + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseList(TokenHelper.getToken(), casetypeCode, - casetypeDetailCode, caseStateId, registerTimeBegin, registerTimeEnd, eorc, limit, offset); + casetypeDetailCode, caseStateId, registerTimeBegin, registerTimeEnd, eorc, 15, offset); } /** diff --git a/app/build.gradle b/app/build.gradle index 5bc8157..01c4773 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,4 +91,6 @@ implementation 'fm.jiecao:jiecaovideoplayer:5.5.4' //ArcGIS implementation 'com.esri.arcgisruntime:arcgis-android:100.10.0' + //上拉加载下拉刷新 + implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' } diff --git a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java index 4ee0e48..c7edf5d 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/CaseListModelImpl.java @@ -25,9 +25,9 @@ @Override public Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { Observable observable = RetrofitServiceManager.getCaseListResult(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset); + registerTimeBegin, registerTimeEnd, eorc, offset); return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { @Override public void onCompleted() { diff --git a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java index 5bc67d0..3bad487 100644 --- a/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java +++ b/app/src/main/java/com/casic/dcms/mvp/model/ICaseListModel.java @@ -4,6 +4,5 @@ public interface ICaseListModel { Subscription sendRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); } diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java index e213ffd..9c323dd 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/CaseListPresenterImpl.java @@ -17,10 +17,10 @@ @Override public void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset) { + String registerTimeBegin, String registerTimeEnd, String eorc, int offset) { view.showProgress(); addSubscription(actionModel.sendRetrofitRequest(casetypeCode, casetypeDetailCode, caseStateId, - registerTimeBegin, registerTimeEnd, eorc, limit, offset)); + registerTimeBegin, registerTimeEnd, eorc, offset)); } @Override @@ -31,7 +31,7 @@ @Override public void onSuccess(CaseListResultBean resultBean) { view.hideProgress(); - view.obtainCaseStatusData(resultBean); + view.obtainCaseListData(resultBean); } @Override diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java index c5a0113..142267a 100644 --- a/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/ICaseListPresenter.java @@ -2,7 +2,7 @@ public interface ICaseListPresenter { void onReadyRetrofitRequest(String casetypeCode, String casetypeDetailCode, String caseStateId, - String registerTimeBegin, String registerTimeEnd, String eorc, int limit, int offset); + String registerTimeBegin, String registerTimeEnd, String eorc, int offset); void disposeRetrofitRequest(); } diff --git a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java index 430b7b7..60ec154 100644 --- a/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java +++ b/app/src/main/java/com/casic/dcms/mvp/view/ICaseListView.java @@ -7,5 +7,5 @@ void hideProgress(); - void obtainCaseStatusData(CaseListResultBean resultBean); + void obtainCaseListData(CaseListResultBean resultBean); } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java index c11de8d..f581970 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseListResultActivity.java @@ -1,8 +1,11 @@ package com.casic.dcms.ui; import android.content.Intent; +import android.os.Handler; +import android.os.Message; import android.view.View; +import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; @@ -12,26 +15,51 @@ import com.casic.dcms.adapter.CaseListResultAdapter; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseListResultBean; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; +import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; +import com.casic.dcms.mvp.view.ICaseListView; import com.qmuiteam.qmui.widget.QMUIEmptyView; import com.qmuiteam.qmui.widget.QMUITopBarLayout; +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; +import com.scwang.smartrefresh.layout.SmartRefreshLayout; +import com.scwang.smartrefresh.layout.api.RefreshLayout; +import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; +import com.scwang.smartrefresh.layout.listener.OnRefreshListener; -import java.lang.reflect.Type; +import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; -public class CaseListResultActivity extends BaseActivity { +public class CaseListResultActivity extends BaseActivity implements ICaseListView { private static final String TAG = "CaseListResultActivity"; @BindView(R.id.caseTopLayout) QMUITopBarLayout caseTopLayout; @BindView(R.id.emptyView) QMUIEmptyView emptyView; + @BindView(R.id.refreshLayout) + SmartRefreshLayout refreshLayout; @BindView(R.id.caseRecyclerView) RecyclerView caseRecyclerView; + private CaseListPresenterImpl caseListPresenter; + private QMUITipDialog loadingDialog; + private CaseListResultAdapter adapter; + private String typeCode; + private String typeDetailCode; + private String statusId; + private String startTime; + private String endTime; + private String eorc; + private int pageIndex = 0; + /** + * 临时存储网络请求到的数据 + */ + private List dataBeans = new ArrayList<>(); + private boolean isRefresh, isLoadMore = false; + private WeakReferenceHandler weakReferenceHandler; + @Override public int initLayoutView() { return R.layout.activity_case_list; @@ -51,33 +79,126 @@ @Override public void initData() { - Gson gson = new Gson(); - String resultBeanJson = getIntent().getStringExtra("resultBeanJson"); - Type type = new TypeToken() { - }.getType(); - CaseListResultBean resultBean = gson.fromJson(resultBeanJson, type); - List dataRows = resultBean.getData().getRows(); - if (dataRows.size() == 0) { - emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); - } else { - emptyView.hide(); - CaseListResultAdapter adapter = new CaseListResultAdapter(this, dataRows); - caseRecyclerView.setLayoutManager(new LinearLayoutManager(this)); - caseRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); - caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { - @Override - public void onClick(int position) { - Intent intent = new Intent(CaseListResultActivity.this, CaseDetailActivity.class); - intent.putExtra("id", dataRows.get(position).getId()); - startActivity(intent); - } - }); - } + caseListPresenter = new CaseListPresenterImpl(this); + weakReferenceHandler = new WeakReferenceHandler(this); + typeCode = getIntent().getStringExtra("typeCode"); + typeDetailCode = getIntent().getStringExtra("typeDetailCode"); + statusId = getIntent().getStringExtra("statusId"); + startTime = getIntent().getStringExtra("startTime"); + endTime = getIntent().getStringExtra("endTime"); + eorc = getIntent().getStringExtra("eorc"); + + loadingDialog = new QMUITipDialog.Builder(this) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord("案卷查询中,请稍后") + .create(); + + //加载第一页 + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, endTime, eorc, 0); } @Override public void initEvent() { + refreshLayout.setOnRefreshListener(new OnRefreshListener() { + @Override + public void onRefresh(@NonNull final RefreshLayout refreshLayout) { + isRefresh = true; + //刷新之后页码重置 + pageIndex = 0; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { + @Override + public void onLoadMore(@NonNull final RefreshLayout refreshLayout) { + isLoadMore = true; + pageIndex++; + caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, startTime, + endTime, eorc, pageIndex); + } + }); + } + /** + * 弱应用Handler,防止内存泄漏 + */ + private static class WeakReferenceHandler extends Handler { + private WeakReference reference; + + private WeakReferenceHandler(CaseListResultActivity activity) { + reference = new WeakReference<>(activity); + } + + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + CaseListResultActivity resultActivity = reference.get(); + if (msg.what == 20210425) { + if (resultActivity.isRefresh || resultActivity.isLoadMore) { + resultActivity.adapter.notifyDataSetChanged(); + } else { + //首次加载数据 + if (resultActivity.dataBeans.size() == 0) { + resultActivity.emptyView.show("抱歉,没有查到符合您规定条件的案卷", null); + } else { + resultActivity.emptyView.hide(); + resultActivity.adapter = new CaseListResultAdapter(resultActivity, resultActivity.dataBeans); + resultActivity.caseRecyclerView.setLayoutManager(new LinearLayoutManager(resultActivity)); + resultActivity.caseRecyclerView.addItemDecoration(new DividerItemDecoration(resultActivity, DividerItemDecoration.VERTICAL)); + resultActivity.caseRecyclerView.setAdapter(resultActivity.adapter); + resultActivity.adapter.setOnItemClickListener(new CaseListResultAdapter.OnItemClickListener() { + @Override + public void onClick(int position) { + Intent intent = new Intent(resultActivity, CaseDetailActivity.class); + intent.putExtra("id", resultActivity.dataBeans.get(position).getId()); + resultActivity.startActivity(intent); + } + }); + } + } + } + } + } + + @Override + public void showProgress() { + loadingDialog.show(); + } + + @Override + public void obtainCaseListData(CaseListResultBean resultBean) { + if (resultBean.isSuccess()) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + for (int i = 0; i < dataRows.size(); i++) { + dataBeans.add(0, dataRows.get(i)); + } + refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + dataBeans.addAll(dataRows); + refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + //更新RecyclerView + weakReferenceHandler.sendEmptyMessage(20210425); + } + } + + @Override + public void hideProgress() { + loadingDialog.hide(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (caseListPresenter != null) { + caseListPresenter.disposeRetrofitRequest(); + } } } diff --git a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java index a4740ac..30762e9 100644 --- a/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/CaseSearchActivity.java @@ -10,28 +10,23 @@ import com.casic.dcms.R; import com.casic.dcms.base.BaseActivity; import com.casic.dcms.bean.CaseLargeClassBean; -import com.casic.dcms.bean.CaseListResultBean; import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.CaseStatusBean; import com.casic.dcms.mvp.presenter.CaseLargeClassPresenterImpl; -import com.casic.dcms.mvp.presenter.CaseListPresenterImpl; import com.casic.dcms.mvp.presenter.CaseSmallClassPresenterImpl; import com.casic.dcms.mvp.presenter.CaseStatusPresenterImpl; import com.casic.dcms.mvp.view.ICaseLargeClassView; -import com.casic.dcms.mvp.view.ICaseListView; import com.casic.dcms.mvp.view.ICaseSmallClassView; import com.casic.dcms.mvp.view.ICaseStatusView; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; import com.casic.dcms.utils.TimeOrDateUtil; -import com.google.gson.Gson; import com.jzxiang.pickerview.TimePickerDialog; import com.jzxiang.pickerview.data.Type; import com.qmuiteam.qmui.widget.QMUITopBarLayout; import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; import com.qmuiteam.qmui.widget.dialog.QMUIDialog; import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction; -import com.qmuiteam.qmui.widget.dialog.QMUITipDialog; import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton; import java.util.List; @@ -40,7 +35,7 @@ import butterknife.OnClick; public class CaseSearchActivity extends BaseActivity implements View.OnClickListener, - ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView, ICaseListView { + ICaseLargeClassView, ICaseSmallClassView, ICaseStatusView { private static final String TAG = "CaseSearchActivity"; private Context context = this; @@ -68,13 +63,10 @@ private CaseSmallClassPresenterImpl caseSmallClassPresenter; private List smallClassBeans; private CaseStatusPresenterImpl caseStatusPresenter; - private CaseListPresenterImpl caseListPresenter; - private QMUITipDialog loadingDialog; - private String eorc; - private String typeDetailCode; private String typeCode; - private Gson gson; + private String typeDetailCode; private String statusId; + private String eorc; @Override public int initLayoutView() { @@ -98,18 +90,12 @@ caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this); caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this); caseStatusPresenter = new CaseStatusPresenterImpl(this); - caseListPresenter = new CaseListPresenterImpl(this); } @Override public void initEvent() { searchButton.setChangeAlphaWhenPress(true); resetButton.setChangeAlphaWhenPress(true); - loadingDialog = new QMUITipDialog.Builder(this) - .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) - .setTipWord("查询中,请稍后") - .create(); - gson = new Gson(); } @OnClick({R.id.caseClassLayout, R.id.caseLargeClassLayout, R.id.caseSmallClassLayout, R.id.caseStatusLayout, @@ -131,8 +117,7 @@ caseClassView.setTextColor(ColorHelper.getResourcesColor(context, R.color.textColor)); //获取案卷大类 - String eorc = String.valueOf(position + 1); - caseLargeClassPresenter.onReadyRetrofitRequest(eorc); + caseLargeClassPresenter.onReadyRetrofitRequest(String.valueOf(position + 1)); } }).build().show(); break; @@ -218,9 +203,14 @@ }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.searchButton: - caseListPresenter.onReadyRetrofitRequest(typeCode, typeDetailCode, statusId, - startTimeView.getText().toString(), endTimeView.getText().toString(), - eorc, 20, 0); + Intent intent = new Intent(this, CaseListResultActivity.class); + intent.putExtra("typeCode", typeCode); + intent.putExtra("typeDetailCode", typeDetailCode); + intent.putExtra("statusId", statusId); + intent.putExtra("startTime", startTimeView.getText().toString()); + intent.putExtra("endTime", endTimeView.getText().toString()); + intent.putExtra("eorc", eorc); + startActivity(intent); break; case R.id.resetButton: new QMUIDialog.MessageDialogBuilder(context) @@ -302,26 +292,6 @@ } @Override - public void showProgress() { - loadingDialog.show(); - } - - @Override - public void obtainCaseStatusData(CaseListResultBean resultBean) { -// Log.d(TAG, "obtainCaseStatusData: " + new Gson().toJson(resultBean)); - if (resultBean.isSuccess()) { - Intent intent = new Intent(this, CaseListResultActivity.class); - intent.putExtra("resultBeanJson", gson.toJson(resultBean)); - startActivity(intent); - } - } - - @Override - public void hideProgress() { - loadingDialog.hide(); - } - - @Override protected void onDestroy() { super.onDestroy(); if (caseLargeClassPresenter != null) { @@ -333,8 +303,5 @@ if (caseStatusPresenter != null) { caseStatusPresenter.disposeRetrofitRequest(); } - if (caseListPresenter != null) { - caseListPresenter.disposeRetrofitRequest(); - } } } diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index d24478f..114e8e3 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -202,11 +202,11 @@ */ public static Observable getCaseListResult(String casetypeCode, String casetypeDetailCode, String caseStateId, String registerTimeBegin, String registerTimeEnd, String eorc, - int limit, int offset) { + int offset) { Retrofit retrofit = createRetrofit(); RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainCaseList(TokenHelper.getToken(), casetypeCode, - casetypeDetailCode, caseStateId, registerTimeBegin, registerTimeEnd, eorc, limit, offset); + casetypeDetailCode, caseStateId, registerTimeBegin, registerTimeEnd, eorc, 15, offset); } /** diff --git a/app/src/main/res/layout/activity_case_list.xml b/app/src/main/res/layout/activity_case_list.xml index b522da3..260ece2 100644 --- a/app/src/main/res/layout/activity_case_list.xml +++ b/app/src/main/res/layout/activity_case_list.xml @@ -16,9 +16,30 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - + android:layout_height="match_parent"> + + + + + + + + + + \ No newline at end of file