|
@@ -0,0 +1,105 @@
|
|
|
|
|
+package com.xuqm.base.ui;
|
|
|
|
|
+
|
|
|
|
|
+import android.os.Bundle;
|
|
|
|
|
+import android.view.View;
|
|
|
|
|
+
|
|
|
|
|
+import androidx.databinding.ViewDataBinding;
|
|
|
|
|
+import androidx.lifecycle.ViewModelProvider;
|
|
|
|
|
+import androidx.paging.PagedList;
|
|
|
|
|
+import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
|
|
+import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
+
|
|
|
|
|
+import com.xuqm.base.R;
|
|
|
|
|
+import com.xuqm.base.adapter.BaseItem;
|
|
|
|
|
+import com.xuqm.base.adapter.BasePagedAdapter;
|
|
|
|
|
+import com.xuqm.base.common.RefreshResult;
|
|
|
|
|
+import com.xuqm.base.viewmodel.BaseListViewModel;
|
|
|
|
|
+import com.xuqm.base.viewmodel.callback.AdapterObserverCallback;
|
|
|
|
|
+import com.xuqm.base.viewmodel.callback.DataObserverCallback;
|
|
|
|
|
+
|
|
|
|
|
+import java.lang.reflect.ParameterizedType;
|
|
|
|
|
+
|
|
|
|
|
+public abstract class BaseListFormLayoutNormalActivity<T extends BaseItem, VM extends BaseListViewModel<T>, V extends ViewDataBinding>
|
|
|
|
|
+ extends BaseActivity<V> {
|
|
|
|
|
+
|
|
|
|
|
+ private final ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
|
|
|
|
|
+ private final Class<VM> cal = (Class<VM>) parameterizedType.getActualTypeArguments()[1];
|
|
|
|
|
+ private VM viewModel;
|
|
|
|
|
+ private BasePagedAdapter<T> adapter;
|
|
|
|
|
+
|
|
|
|
|
+ public RecyclerView recyclerView;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int getLayoutId() {
|
|
|
|
|
+ return R.layout.activity_base_list_normal;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public VM getViewModel() {
|
|
|
|
|
+ return viewModel;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public BasePagedAdapter<T> getAdapter() {
|
|
|
|
|
+ return adapter;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void initView(Bundle savedInstanceState) {
|
|
|
|
|
+ viewModel = new ViewModelProvider(this).get(cal);
|
|
|
|
|
+ adapter = adapter();
|
|
|
|
|
+ adapter.setItemClickListener(this::itemClicked);
|
|
|
|
|
+ adapter.setItemLongClickListener(this::itemLongClicked);
|
|
|
|
|
+ recyclerView = findViewById(R.id.baseRecyclerView);
|
|
|
|
|
+ recyclerView.setAdapter(adapter);
|
|
|
|
|
+ recyclerView.setLayoutManager(new LinearLayoutManager(mContext, getRecyclerOrientation(), false));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void initData() {
|
|
|
|
|
+ viewModel.observeDataObserver(this, new DataObserverCallback<T>() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void data(PagedList<T> data) {
|
|
|
|
|
+ adapter.submitList(data);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void refreshResult(RefreshResult refreshResult) {
|
|
|
|
|
+ refreshFinished(refreshResult);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void loadMoreResult(RefreshResult refreshResult) {
|
|
|
|
|
+ loadMoreFinished(refreshResult);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ viewModel.observeAdapterObserver(this, new AdapterObserverCallback() {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void notifyItem(int position, Object payload) {
|
|
|
|
|
+ adapter.notifyItemChanged(position, payload);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void removeItem(int position) {
|
|
|
|
|
+ adapter.notifyItemRangeRemoved(position, adapter.getItemCount() - 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void itemClicked(View view, T item, int position) {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public boolean itemLongClicked(View view, T item, int position) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected int getRecyclerOrientation() {
|
|
|
|
|
+ return RecyclerView.VERTICAL;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void refreshFinished(RefreshResult result) {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void loadMoreFinished(RefreshResult result) {
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public abstract BasePagedAdapter<T> adapter();
|
|
|
|
|
+}
|