newModels) {
+ DiffCallback diffCallback = new DiffCallback(oldModels, newModels);
+ final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback);
+// 更新数据有bug
+// diffResult.dispatchUpdatesTo(this);
+ diffResult.dispatchUpdatesTo(listUpdateCallback);
+ curItemModels = newModels;
+ oldModels.clear();
+ oldModels.addAll(newModels);
+ }
+
+ private final ListUpdateCallback listUpdateCallback = new ListUpdateCallback() {
+ @Override
+ public void onInserted(int position, int count) {
+ // notifyItemRangeChanged 替换 notifyItemInserted
+ adapter.notifyItemInserted(position);
+ }
+
+ @Override
+ public void onRemoved(int position, int count) {
+ adapter.notifyItemRangeRemoved(position, count);
+ }
+
+ @Override
+ public void onMoved(int fromPosition, int toPosition) {
+ adapter.notifyItemMoved(fromPosition, toPosition);
+ }
+
+ @Override
+ public void onChanged(int position, int count, Object payload) {
+ adapter.notifyItemRangeChanged(position, count, payload);
+ }
+ };
+
+ @Override
+ public long getItemId(int position) {
+ return curItemModels.get(position).hashCode();
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/ISwipeRefresh.java b/app/src/main/java/com/gank/gankly/ui/base/ISwipeRefresh.java
index 8224143c..19bf4a10 100644
--- a/app/src/main/java/com/gank/gankly/ui/base/ISwipeRefresh.java
+++ b/app/src/main/java/com/gank/gankly/ui/base/ISwipeRefresh.java
@@ -1,10 +1,9 @@
package com.gank.gankly.ui.base;
-import android.support.v4.widget.SwipeRefreshLayout;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
* Create by LingYan on 2016-09-13
- * Email:137387869@qq.com
*/
public interface ISwipeRefresh {
void setSwipeRefreshLayout(SwipeRefreshLayout swipeRefreshLayout);
diff --git a/app/src/main/java/com/gank/gankly/ui/base/InitializeService.java b/app/src/main/java/com/gank/gankly/ui/base/InitializeService.java
deleted file mode 100644
index a1914f62..00000000
--- a/app/src/main/java/com/gank/gankly/ui/base/InitializeService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.gank.gankly.ui.base;
-
-import android.app.IntentService;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-import com.facebook.stetho.Stetho;
-import com.gank.gankly.config.Constants;
-import com.gank.gankly.config.Preferences;
-import com.gank.gankly.utils.GanklyPreferences;
-import com.tencent.bugly.Bugly;
-import com.tencent.bugly.beta.Beta;
-import com.tencent.smtt.sdk.QbSdk;
-
-/**
- * Create by LingYan on 2016-09-18
- * Email:137387869@qq.com
- */
-public class InitializeService extends IntentService {
- public static final String SERVICE_ACTION = "com.gank.gankly.ui.base.InitializeService";
- private static final String DB_NAME = "gank.db";
- private Context mContext;
-
- public InitializeService() {
- this(SERVICE_ACTION);
- }
-
- public InitializeService(String name) {
- super(name);
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- if (intent != null && SERVICE_ACTION.equals(intent.getAction())) {
- initStart();
- }
- }
-
- public static void start(Context context) {
- Intent intent = new Intent(context, InitializeService.class);
- intent.setAction(SERVICE_ACTION);
- context.startService(intent);
- }
-
- private void initStart() {
- //数据库Chrome上调试 -- start
- Stetho.initializeWithDefaults(getApplicationContext());
- //stetho -- end
-
- //Bugly 测试:true -- start
- Beta.autoDownloadOnWifi = true;
- Beta.autoCheckUpgrade = GanklyPreferences.getBoolean(Preferences.SETTING_AUTO_CHECK, true);
- Bugly.init(getApplicationContext(), Constants.CRASH_LOG_ID, false);
- //Bugly -- end
-
- //x5 -- start
- //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
- QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
-
- @Override
- public void onViewInitFinished(boolean arg0) {
- //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
- Log.d("app", " onViewInitFinished is " + arg0);
- }
-
- @Override
- public void onCoreInitFinished() {
- }
- };
- //x5内核初始化接口
- QbSdk.initX5Environment(getApplicationContext(), cb);
- //x5 -- end
- }
-}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/LazyFragment.java b/app/src/main/java/com/gank/gankly/ui/base/LazyFragment.java
index cd07bfb5..dbf565eb 100644
--- a/app/src/main/java/com/gank/gankly/ui/base/LazyFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/base/LazyFragment.java
@@ -1,41 +1,70 @@
package com.gank.gankly.ui.base;
import android.os.Bundle;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import android.view.View;
+
+import com.gank.gankly.butterknife.ButterKnifeFragment;
+
/**
- * Create by LingYan on 2016-5-12
+ * Create by LingYan on 2018-08-24
*/
-public abstract class LazyFragment extends BaseSwipeRefreshFragment {
- private boolean isVisible = false; //是否可见
- private boolean isView = false; //是否建立视图关系
- private boolean isFirstLoad = true; //是否第一次加载
+
+public abstract class LazyFragment extends ButterKnifeFragment {
+ // 视图是否已创建,第一次,系统默认调用 setUserVisibleHint
+ private boolean isVisibleView;
+
+ // 视图是否已经加载过
+ private boolean isPrepared;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ isVisibleView = false;
+ isPrepared = false;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ isVisibleView = true;
+ }
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- isView = true;
- lazyLoadData();
+ if (!isPrepared && getUserVisibleHint()) {
+ onLazyCreate();
+ }
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
- if (isVisibleToUser) {
- isVisible = true;
- lazyLoadData();
- } else {
- isVisible = false;
- }
super.setUserVisibleHint(isVisibleToUser);
+ if (!isVisibleView) {
+ return;
+ }
+ if (!isPrepared && isVisibleToUser) {
+ onLazyCreate();
+ }
}
- protected abstract void initData();
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ isPrepared = false;
+ isVisibleView = false;
+ }
- private void lazyLoadData() {
- if (!isVisible || !isFirstLoad || !isView) {
- return;
- }
- initData();
- isFirstLoad = false;
+ private void onLazyCreate() {
+ isPrepared = true;
+ onLazyActivityCreate();
}
+
+ /**
+ * 实现懒加载,代替原来的onActivityCreated方法,把原来逻辑,转移到这里
+ */
+ public abstract void onLazyActivityCreate();
}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/BaseActivity.java b/app/src/main/java/com/gank/gankly/ui/base/activity/BaseActivity.java
similarity index 67%
rename from app/src/main/java/com/gank/gankly/ui/base/BaseActivity.java
rename to app/src/main/java/com/gank/gankly/ui/base/activity/BaseActivity.java
index d4736a7d..465e11fe 100644
--- a/app/src/main/java/com/gank/gankly/ui/base/BaseActivity.java
+++ b/app/src/main/java/com/gank/gankly/ui/base/activity/BaseActivity.java
@@ -1,51 +1,40 @@
-package com.gank.gankly.ui.base;
+package com.gank.gankly.ui.base.activity;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
-import android.transition.Transition;
-import android.transition.TransitionInflater;
import android.util.Pair;
import android.view.View;
import android.widget.TextView;
-import com.gank.gankly.App;
import com.gank.gankly.R;
-import com.gank.gankly.presenter.BasePresenter;
+import com.google.android.material.snackbar.Snackbar;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* Create by LingYan on 2016-04-05
- * Email:137387869@qq.com
*/
-public abstract class BaseActivity extends AppCompatActivity {
- private static final int contentAreaId = R.id.main_frame_layout;
+public abstract class BaseActivity extends AppCompatActivity {
+ private static final int contentResId = R.id.main_frame_layout;
private long mLastTime;
- protected P mPresenter;
protected Unbinder mUnBinder;
- FragmentTransaction mFragmentTransaction;
+ protected FragmentTransaction mFragmentTransaction;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
- initTheme();
super.onCreate(savedInstanceState);
setContentView(getContentId());
- initPresenter();
mUnBinder = ButterKnife.bind(this);
- initValues();
- initViews();
- bindListener();
changeThemes();
mFragmentTransaction = getSupportFragmentManager()
.beginTransaction();
@@ -60,7 +49,7 @@ public void addMainFragment(Fragment fragment) {
}
public void addHideFragment(Fragment from, Fragment to) {
- addHideFragment(from, to, contentAreaId, null, "", false);
+ addHideFragment(from, to, contentResId, null, "", false);
}
public void addHideFragment(Fragment from, Fragment to, String Tag, int contentAreaId) {
@@ -68,40 +57,11 @@ public void addHideFragment(Fragment from, Fragment to, String Tag, int contentA
}
public void addAnimFragment(Fragment from, Fragment to, boolean isAnim) {
- addHideFragment(from, to, contentAreaId, null, "", isAnim);
+ addHideFragment(from, to, contentResId, null, "", isAnim);
}
public void addAnimFragment(Fragment from, Fragment to, String tag, boolean isAnim) {
- addHideFragment(from, to, contentAreaId, null, tag, isAnim);
- }
-
- public void transitionHideFragment(Fragment from, Fragment to, int contentAreaId,
- Bundle bundle, String tag, Pair transitionViews) {
- if (isOpenMore()) {
- return;
- }
-
- from = checkNull(from);
- to = checkNull(to);
- transitionViews = checkNull(transitionViews);
-
- Transition imageTransition = TransitionInflater.from(this).inflateTransition(R.transition.image_transfom);
- mFragmentTransaction.addSharedElement(transitionViews.first, transitionViews.second);
- to.setSharedElementEnterTransition(imageTransition);
- to.setSharedElementReturnTransition(imageTransition);
-
- if (bundle != null) {
- to.setArguments(bundle);
- }
-
- if (!TextUtils.isEmpty(tag)) {
- mFragmentTransaction.addToBackStack(tag);
- }
-
- mFragmentTransaction
- .hide(from)
- .add(contentAreaId, to, tag)
- .commitAllowingStateLoss();
+ addHideFragment(from, to, contentResId, null, tag, isAnim);
}
public void addHideFragment(Fragment from, Fragment to, int contentAreaId,
@@ -181,29 +141,13 @@ private void addFragment(Fragment fragment, Bundle bundle, String tag) {
}
if (!fragment.isAdded()) {
- mFragmentTransaction.add(contentAreaId, fragment);
+ mFragmentTransaction.add(contentResId, fragment);
}
mFragmentTransaction.commitAllowingStateLoss();
}
protected abstract int getContentId();
- protected abstract void initValues();
-
- protected abstract void initViews();
-
- protected abstract void bindListener();
-
- protected void initPresenter() {}
-
- protected void initTheme() {
- if (App.isNight()) {
- setTheme(R.style.AppTheme_Night);
- } else {
- setTheme(R.style.AppTheme_light);
- }
- }
-
public void gotoActivity(Class extends Activity> cls, boolean isFinish) {
Intent intent = new Intent(this, cls);
startActivity(intent);
@@ -226,7 +170,7 @@ public void showSnackbar(View view, int rexText, int resColor) {
// Changing action button text color
View sbView = snackbar.getView();
- TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
+ TextView textView = (TextView) sbView.findViewById(R.id.snackbar_text);
textView.setTextColor(resColor);
snackbar.show();
}
@@ -234,7 +178,6 @@ public void showSnackbar(View view, int rexText, int resColor) {
@Override
protected void onDestroy() {
super.onDestroy();
- ((App) this.getApplication()).getRefWatcher().watch(this);
if (mUnBinder != null) {
mUnBinder.unbind();
mUnBinder = null;
diff --git a/app/src/main/java/com/gank/gankly/ui/base/activity/SupportActivity.java b/app/src/main/java/com/gank/gankly/ui/base/activity/SupportActivity.java
new file mode 100644
index 00000000..7827707e
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/activity/SupportActivity.java
@@ -0,0 +1,54 @@
+package com.gank.gankly.ui.base.activity;
+
+import com.gank.gankly.mvp.base.SupportView;
+
+/**
+ * Create by LingYan on 2017-10-03
+ */
+
+public abstract class SupportActivity extends BaseActivity implements SupportView {
+ @Override
+ public void hasNoMoreDate() {
+
+ }
+
+ @Override
+ public void showContent() {
+
+ }
+
+ @Override
+ public void shortToast(String msg) {
+
+ }
+
+ @Override
+ public void showProgress() {
+
+ }
+
+ @Override
+ public void hideProgress() {
+
+ }
+
+ @Override
+ public void showEmpty() {
+
+ }
+
+ @Override
+ public void showDisNetWork() {
+
+ }
+
+ @Override
+ public void showError() {
+
+ }
+
+ @Override
+ protected int getContentId() {
+ return 0;
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseAdapter.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseAdapter.java
new file mode 100644
index 00000000..f53182be
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseAdapter.java
@@ -0,0 +1,76 @@
+package com.gank.gankly.ui.base.adapter;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.ViewGroup;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Create by LingYan on 2018-09-25
+ */
+
+public abstract class BaseAdapter extends RecyclerView.Adapter {
+ private static final int DEFAULT_SPAN_COUNT = 1;
+ private List viewModels = new ArrayList<>();
+
+ @Override
+ public VH onCreateViewHolder(ViewGroup parent, int viewType) {
+ ViewModel viewModel = getViewModel(viewType);
+ return viewModel.createViewHolder(parent);
+ }
+
+ @Override
+ public void onBindViewHolder(VH holder, int position) {
+ ViewModel viewModel = getViewModelForPosition(position);
+ viewModel.bindView(holder);
+ }
+
+ @Override
+ public int getItemCount() {
+ return viewModels.size();
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return viewModels.get(position).getViewType();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return super.getItemId(position);
+ }
+
+ public void setViewManager(ViewManager viewManager) {
+ viewManager.setAdapter(this);
+ }
+
+ void setViewModels(List viewModels) {
+ this.viewModels = viewModels;
+ }
+
+ private ViewModel getViewModelForPosition(int position) {
+ return viewModels.get(position);
+ }
+
+ private ViewModel getViewModel(int viewType) {
+ for (ViewModel viewModel : viewModels) {
+ if (viewModel.getViewType() == viewType) {
+ return viewModel;
+ }
+ }
+ throw new RuntimeException("can't found viewType");
+ }
+
+ public final GridLayoutManager.SpanSizeLookup spanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
+ @Override
+ public int getSpanSize(int position) {
+ try {
+ return viewModels.get(position).getSpanSize(DEFAULT_SPAN_COUNT, position);
+ } catch (Exception e) {
+ return DEFAULT_SPAN_COUNT;
+ }
+ }
+ };
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseHolder.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseHolder.java
new file mode 100644
index 00000000..7e15dfe4
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseHolder.java
@@ -0,0 +1,13 @@
+package com.gank.gankly.ui.base.adapter;
+
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.View;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public class BaseHolder extends RecyclerView.ViewHolder {
+ public BaseHolder(View view) {
+ super(view);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewManager.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewManager.java
new file mode 100644
index 00000000..fcd10e84
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewManager.java
@@ -0,0 +1,19 @@
+package com.gank.gankly.ui.base.adapter;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public abstract class BaseViewManager extends ViewManager {
+ protected BaseAdapter baseAdapter;
+
+ @Override
+ public void setAdapter(BaseAdapter baseAdapter) {
+ this.baseAdapter = baseAdapter;
+ }
+
+ @Override
+ public void notifyDataSetChanged() {
+ baseAdapter.setViewModels(getModels());
+ baseAdapter.notifyDataSetChanged();
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewModel.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewModel.java
new file mode 100644
index 00000000..daf752d4
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/BaseViewModel.java
@@ -0,0 +1,49 @@
+package com.gank.gankly.ui.base.adapter;
+
+import android.content.Context;
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public abstract class BaseViewModel extends ViewModel {
+ protected Context context;
+
+ @Override
+ public void bindView(VH holder, int position, List payloads) {
+ }
+
+ @Override
+ public void bindView(VH holder) {
+ context = holder.itemView.getContext();
+ }
+
+ @Override
+ public int getSpanSize(int size, int position) {
+ return size;
+ }
+
+ @Override
+ public boolean isItemSame(ItemComparator itemComparator) {
+ return false;
+ }
+
+ @Override
+ public boolean isContentEqual(ItemComparator itemComparator) {
+ return false;
+ }
+
+ @Override
+ public int getViewType() {
+ return getLayoutRes();
+ }
+
+ protected View createView(ViewGroup viewGroup) {
+ return LayoutInflater.from(viewGroup.getContext()).inflate(getLayoutRes(), viewGroup, false);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/ButterKnifeHolder.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/ButterKnifeHolder.java
new file mode 100644
index 00000000..d95bdaa5
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/ButterKnifeHolder.java
@@ -0,0 +1,15 @@
+package com.gank.gankly.ui.base.adapter;
+
+import android.view.View;
+
+import butterknife.ButterKnife;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public class ButterKnifeHolder extends BaseHolder {
+ public ButterKnifeHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/ItemComparator.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/ItemComparator.java
new file mode 100644
index 00000000..1d50f11d
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/ItemComparator.java
@@ -0,0 +1,10 @@
+package com.gank.gankly.ui.base.adapter;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public interface ItemComparator {
+ boolean isItemSame(ItemComparator itemComparator);
+
+ boolean isContentEqual(ItemComparator itemComparator);
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewManager.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewManager.java
new file mode 100644
index 00000000..1438e3a7
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewManager.java
@@ -0,0 +1,14 @@
+package com.gank.gankly.ui.base.adapter;
+
+import java.util.List;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public abstract class ViewManager {
+ public abstract void setAdapter(BaseAdapter baseAdapter);
+
+ public abstract List getModels();
+
+ public abstract void notifyDataSetChanged();
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModel.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModel.java
new file mode 100644
index 00000000..030d78de
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModel.java
@@ -0,0 +1,23 @@
+package com.gank.gankly.ui.base.adapter;
+
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.ViewGroup;
+
+import java.util.List;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public abstract class ViewModel implements ItemComparator {
+ public abstract int getViewType();
+
+ public abstract int getSpanSize(int size, int position);
+
+ public abstract VH createViewHolder(ViewGroup parent);
+
+ public abstract void bindView(VH holder);
+
+ public abstract void bindView(VH holder, int position, List payloads);
+
+ public abstract int getLayoutRes();
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModelAdapter.java b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModelAdapter.java
new file mode 100644
index 00000000..eb993e28
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/adapter/ViewModelAdapter.java
@@ -0,0 +1,11 @@
+package com.gank.gankly.ui.base.adapter;
+
+import com.gank.gankly.ui.base.BaseViewHolder;
+
+/**
+ * Create by LingYan on 2018-09-26
+ */
+public class ViewModelAdapter extends BaseAdapter {
+
+
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/fragment/SupportFragment.java b/app/src/main/java/com/gank/gankly/ui/base/fragment/SupportFragment.java
new file mode 100644
index 00000000..8a7c0b4e
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/fragment/SupportFragment.java
@@ -0,0 +1,69 @@
+package com.gank.gankly.ui.base.fragment;
+
+import android.os.Bundle;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.gank.gankly.butterknife.ButterKnifeFragment;
+import com.gank.gankly.mvp.base.SupportView;
+import com.gank.gankly.utils.ToastUtils;
+
+/**
+ * Create by LingYan on 2017-09-28
+ */
+
+public abstract class SupportFragment extends ButterKnifeFragment implements SupportView {
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ }
+
+ @Override
+ public void showProgress() {
+
+ }
+
+ @Override
+ public void hideProgress() {
+
+ }
+
+ @Override
+ public void hasNoMoreDate() {
+
+ }
+
+ @Override
+ public void showContent() {
+
+ }
+
+ @Override
+ public void showEmpty() {
+
+ }
+
+ @Override
+ public void showDisNetWork() {
+
+ }
+
+ @Override
+ public void showError() {
+
+ }
+
+ @Override
+ public void shortToast(String str) {
+ if (!TextUtils.isEmpty(str)) {
+ ToastUtils.showToast(getContext(), str);
+ }
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/base/fragment/ThemeFragment.java b/app/src/main/java/com/gank/gankly/ui/base/fragment/ThemeFragment.java
new file mode 100644
index 00000000..66609bfc
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/base/fragment/ThemeFragment.java
@@ -0,0 +1,68 @@
+package com.gank.gankly.ui.base.fragment;
+
+import android.content.res.TypedArray;
+import android.os.Bundle;
+import android.view.View;
+
+import com.gank.gankly.R;
+import com.gank.gankly.butterknife.ButterKnifeFragment;
+import com.gank.gankly.utils.ListUtils;
+import com.gank.gankly.widget.LYRelativeLayoutRipple;
+
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
+
+/**
+ * Create by LingYan on 2016-10-21
+ */
+
+public abstract class ThemeFragment extends ButterKnifeFragment {
+ private SwipeRefreshLayout mSwipeRefreshLayout;
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ }
+
+// @Override
+// public void changeThemes() {
+// super.changeThemes();
+// if (mSwipeRefreshLayout != null) {
+// StyleUtils.changeSwipeRefreshLayout(mSwipeRefreshLayout);
+// }
+// }
+
+ public void setSwipeRefreshLayout(SwipeRefreshLayout swipeRefreshLayout) {
+ this.mSwipeRefreshLayout = swipeRefreshLayout;
+ }
+
+ public void setItemSelectBackground(@NonNull List list) {
+ if (!ListUtils.isEmpty(list)) {
+ int[] attrs = new int[]{R.attr.selectableItemBackground};
+ TypedArray typedArray = getActivity().obtainStyledAttributes(attrs);
+ final int backgroundResource = typedArray.getResourceId(0, 0);
+
+// ButterKnife.apply(list, new ButterKnife.Action() {
+// @Override
+// public void apply(@NonNull View view, int index) {
+// view.setBackgroundResource(backgroundResource);
+// }
+// });
+ }
+ }
+
+ public void setItemBackground(@NonNull List list) {
+ if (!ListUtils.isEmpty(list)) {
+ final int backgroundResource = R.attr.lyItemSelectBackground;
+// ButterKnife.apply(list, new ButterKnife.Action() {
+// @Override
+// public void apply(@NonNull LYRelativeLayoutRipple view, int index) {
+// view.setCustomBackgroundResource(backgroundResource);
+// }
+// });
+ }
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/collect/CollectAdapter.java b/app/src/main/java/com/gank/gankly/ui/collect/CollectAdapter.java
index b3d4b152..22b26e1e 100644
--- a/app/src/main/java/com/gank/gankly/ui/collect/CollectAdapter.java
+++ b/app/src/main/java/com/gank/gankly/ui/collect/CollectAdapter.java
@@ -1,7 +1,6 @@
package com.gank.gankly.ui.collect;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -20,6 +19,7 @@
import java.util.Date;
import java.util.List;
+import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -51,7 +51,7 @@ public void onBindViewHolder(CollectHolderView holder, int position) {
holder.title.setText(urlCollect.getComment());
Date date = urlCollect.getDate();
- holder.time.setText(DateUtils.getFormatDate(date, DateUtils.YY_MM_DD_));
+ holder.time.setText(DateUtils.formatString(date, DateUtils.YY_MM_DD_HORIZONTAL));
holder.type.setText(urlCollect.getG_type());
holder.author.setText(urlCollect.getG_author());
diff --git a/app/src/main/java/com/gank/gankly/ui/collect/CollectContract.java b/app/src/main/java/com/gank/gankly/ui/collect/CollectContract.java
index 2323b48a..499fea23 100644
--- a/app/src/main/java/com/gank/gankly/ui/collect/CollectContract.java
+++ b/app/src/main/java/com/gank/gankly/ui/collect/CollectContract.java
@@ -1,19 +1,18 @@
package com.gank.gankly.ui.collect;
import com.gank.gankly.data.entity.UrlCollect;
-import com.gank.gankly.mvp.IFetchPresenter;
-import com.gank.gankly.mvp.IFetchView;
+import com.gank.gankly.mvp.ILoadMorePresenter;
+import com.gank.gankly.mvp.base.SupportView;
import java.util.List;
/**
* Create by LingYan on 2016-10-20
- * Email:137387869@qq.com
*/
public interface CollectContract {
- interface View extends IFetchView {
+ interface View extends SupportView {
void setAdapterList(List list);
void appendAdapter(List list);
@@ -25,9 +24,9 @@ interface View extends IFetchView {
void revokeCollect();
}
- interface Presenter extends IFetchPresenter {
- void cancelCollect(long position);
+ abstract class Presenter implements ILoadMorePresenter {
+ abstract void cancelCollect(long position);
- void insertCollect(UrlCollect collect);
+ abstract void insertCollect(UrlCollect collect);
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/collect/CollectFragment.java b/app/src/main/java/com/gank/gankly/ui/collect/CollectFragment.java
index 1ab64296..9969df73 100644
--- a/app/src/main/java/com/gank/gankly/ui/collect/CollectFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/collect/CollectFragment.java
@@ -2,38 +2,38 @@
import android.content.Context;
import android.os.Bundle;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.design.widget.Snackbar;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.Toolbar;
-import android.view.animation.OvershootInterpolator;
+import android.view.View;
import com.gank.gankly.R;
import com.gank.gankly.bean.RxCollect;
import com.gank.gankly.data.entity.UrlCollect;
-import com.gank.gankly.mvp.base.FetchFragment;
import com.gank.gankly.mvp.source.LocalDataSource;
import com.gank.gankly.rxjava.RxBus_;
+import com.gank.gankly.ui.base.fragment.SupportFragment;
import com.gank.gankly.ui.more.MoreActivity;
import com.gank.gankly.ui.web.normal.WebActivity;
import com.gank.gankly.widget.LyRecyclerView;
import com.gank.gankly.widget.LySwipeRefreshLayout;
import com.gank.gankly.widget.MultipleStatusView;
+import com.google.android.material.snackbar.Snackbar;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.Toolbar;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import io.reactivex.disposables.Disposable;
-import jp.wasabeef.recyclerview.animators.FadeInUpAnimator;
/**
* 收藏
* Create by LingYan on 2016-4-25
- * Email:137387869@qq.com
*/
-public class CollectFragment extends FetchFragment implements CollectContract.View {
+public class CollectFragment extends SupportFragment implements CollectContract.View {
@BindView(R.id.coordinator)
CoordinatorLayout mCoordinatorLayout;
@BindView(R.id.multiple_status_view)
@@ -61,12 +61,8 @@ public void onAttach(Context context) {
}
@Override
- protected void initPresenter() {
- mPresenter = new CollectPresenter(LocalDataSource.getInstance(), this);
- }
-
- @Override
- protected void initValues() {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
mToolbar.setTitle(R.string.mine_my_collect);
mActivity.setSupportActionBar(mToolbar);
ActionBar bar = mActivity.getSupportActionBar();
@@ -82,16 +78,31 @@ protected void initValues() {
onDelete();
}
});
- }
- @Override
- protected void initViews() {
- setSwipeRefreshLayout(mSwipeRefreshLayout);
+ mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
+ @Override
+ public void onRefresh() {
+ showProgress();
+ mPresenter.fetchNew();
+ }
+
+ @Override
+ public void onLoadMore() {
+ mPresenter.fetchMore();
+ }
+ });
+
initAdapter();
setRecyclerView();
initRefresh();
}
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ mPresenter = new CollectPresenter(LocalDataSource.getInstance(), this);
+ }
+
private void setRecyclerView() {
mSwipeRefreshLayout.setLayoutManager(new LinearLayoutManager(mActivity));
mSwipeRefreshLayout.setAdapter(mCollectAdapter);
@@ -125,7 +136,7 @@ public void onClick(int position) {
mRecyclerView = mSwipeRefreshLayout.getRecyclerView();
// mRecyclerView.addItemDecoration(new RecycleViewDivider(mActivity, R.drawable.shape_item_divider));
- mRecyclerView.setItemAnimator(new FadeInUpAnimator(new OvershootInterpolator(1f)));
+// mRecyclerView.setItemAnimator(new FadeInUpAnimator(new OvershootInterpolator(1f)));
mRecyclerView.getItemAnimator().setAddDuration(150);
mRecyclerView.getItemAnimator().setRemoveDuration(150);
}
@@ -134,22 +145,6 @@ private void initAdapter() {
mCollectAdapter = new CollectAdapter(mActivity);
}
- @Override
- protected void bindListener() {
- mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefRecyclerViewListener() {
- @Override
- public void onRefresh() {
- showRefresh();
- mPresenter.fetchNew();
- }
-
- @Override
- public void onLoadMore() {
- mPresenter.fetchMore();
- }
- });
- }
-
private void initRefresh() {
mMultipleStatusView.showLoading();
mPresenter.fetchNew();
@@ -216,13 +211,10 @@ public void showError() {
mMultipleStatusView.showError();
}
- @Override
- public void showLoading() {
- mMultipleStatusView.showLoading();
- }
-
- @Override
- public void showRefreshError(String errorStr) {
+ private void showLoading() {
+ if (mMultipleStatusView != null) {
+ mMultipleStatusView.showLoading();
+ }
}
@Override
@@ -231,12 +223,12 @@ public void showContent() {
}
@Override
- public void showRefresh() {
+ public void showProgress() {
mSwipeRefreshLayout.setRefreshing(true);
}
@Override
- public void hideRefresh() {
+ public void hideProgress() {
mSwipeRefreshLayout.setRefreshing(false);
}
diff --git a/app/src/main/java/com/gank/gankly/ui/collect/CollectPresenter.java b/app/src/main/java/com/gank/gankly/ui/collect/CollectPresenter.java
index f4e1e69d..d635954b 100644
--- a/app/src/main/java/com/gank/gankly/ui/collect/CollectPresenter.java
+++ b/app/src/main/java/com/gank/gankly/ui/collect/CollectPresenter.java
@@ -1,9 +1,8 @@
package com.gank.gankly.ui.collect;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import com.gank.gankly.data.entity.UrlCollect;
-import com.gank.gankly.mvp.BasePresenter;
import com.gank.gankly.mvp.source.LocalDataSource;
import com.gank.gankly.utils.ListUtils;
import com.socks.library.KLog;
@@ -19,7 +18,7 @@
/**
* Create by LingYan on 2016-05-12
*/
-public class CollectPresenter extends BasePresenter implements CollectContract.Presenter {
+public class CollectPresenter extends CollectContract.Presenter {
private static final int LIMIT = 10;
@NonNull
@@ -36,7 +35,7 @@ public CollectPresenter(@NonNull LocalDataSource task, @NonNull CollectContract.
}
private void parseData(List list) {
- int size = ListUtils.getListSize(list);
+ int size = ListUtils.getSize(list);
if (size > 0) {
if (mPage == 0) {
mModelView.setAdapterList(list);
@@ -69,7 +68,7 @@ public void fetchNew() {
@Override
public void fetchMore() {
if (!isNoMore) {
- mModelView.showRefresh();
+ mModelView.showProgress();
int offset = getOffset();
getCollects(offset);
}
@@ -91,7 +90,7 @@ public void onError(Throwable e) {
@Override
public void onComplete() {
- mModelView.hideRefresh();
+ mModelView.hideProgress();
mPage = mPage + 1;
}
@@ -109,7 +108,7 @@ public void onNext(List urlCollects) {
@Override
public void cancelCollect(final long position) {
- mTask.cancelCollect(position)
+ mTask.cancelCollect(position)
// .delaySubscription(4, TimeUnit.SECONDS)
.subscribe(s -> {
@@ -145,13 +144,7 @@ public void onComplete() {
});
}
- @Override
- public void subscribe() {
-
- }
-
- @Override
- public void unSubscribe() {
+ public void destroy() {
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/cure/CureAdapter.java b/app/src/main/java/com/gank/gankly/ui/cure/CureAdapter.java
new file mode 100644
index 00000000..7911198b
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/cure/CureAdapter.java
@@ -0,0 +1,169 @@
+package com.gank.gankly.ui.cure;
+
+import android.lectcoding.ui.adapter.BaseAdapter;
+import android.ly.business.domain.Gift;
+import androidx.annotation.IntDef;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.gank.gankly.R;
+import com.gank.gankly.butterknife.BindViewHolder;
+import com.gank.gankly.butterknife.ItemModel;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+
+import static com.gank.gankly.ui.cure.CureAdapter.ViewType.VIEW_TYPE_CURE;
+
+/**
+ * Create by LingYan on 2016-07-05
+ */
+public class CureAdapter extends BaseAdapter {
+ private ItemCallback itemCallback;
+ private List gifts = new ArrayList<>();
+ private final List items = new ArrayList<>();
+
+ CureAdapter() {
+ setHasStableIds(true);
+ }
+
+ @Override
+ public CureAdapter.NormalViewHolder onCreateViewHolder(ViewGroup parent, @ViewType.CureViewType int viewType) {
+ NormalViewHolder viewHolder;
+ switch (viewType) {
+ case VIEW_TYPE_CURE:
+ viewHolder = new CureHolder(parent);
+ break;
+ default:
+ viewHolder = null;
+ break;
+ }
+ return viewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(NormalViewHolder holder, int position) {
+ switch (holder.getItemViewType()) {
+ case VIEW_TYPE_CURE:
+ ((CureHolder) holder).bindHolder(items.get(position), itemCallback);
+ break;
+ }
+ }
+
+ public void setOnItemClickListener(ItemCallback itemCallback) {
+ this.itemCallback = itemCallback;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (!items.isEmpty()) {
+ return items.get(position).getViewType();
+ }
+ return super.getItemViewType(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return gifts.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ void refillItem(List dailyGirlList) {
+ gifts.clear();
+ appendItem(dailyGirlList);
+ }
+
+ public void appendItem(List dailyGirlList) {
+ int startIndex = items.size();
+ gifts.addAll(dailyGirlList);
+ changeItems(startIndex);
+ }
+
+ private void changeItems(int startIndex) {
+ for (int i = startIndex, size = gifts.size(); i < size; i++) {
+ final Gift gift = gifts.get(i);
+ if (gift != null) {
+ items.add(new CureItem(gift));
+ }
+ }
+ }
+
+ @Override
+ public void destroy() {
+ items.clear();
+ gifts.clear();
+ itemCallback = null;
+ }
+
+ static class CureHolder extends NormalViewHolder {
+ @BindView(R.id.title)
+ TextView title;
+
+ CureHolder(ViewGroup parent) {
+ super(parent, R.layout.adapter_daily_girl);
+ }
+
+ @Override
+ void bindHolder(CureItem item, ItemCallback callback) {
+ super.bindHolder(item, callback);
+ final Gift gift = item.gift;
+ title.setText(gift.title);
+
+ itemView.setOnClickListener(v -> {
+ if (callback != null) {
+ callback.onItemClick(gift.url);
+ }
+ });
+ }
+ }
+
+ static class CureItem extends ItemModel {
+ final Gift gift;
+
+ CureItem(Gift gift) {
+ this.gift = gift;
+ }
+
+ @Override
+ public int getViewType() {
+ return VIEW_TYPE_CURE;
+ }
+ }
+
+ interface ItemCallback {
+ void onItemClick(String url);
+ }
+
+ abstract static class NormalViewHolder extends BindViewHolder {
+
+ NormalViewHolder(ViewGroup parent, int layoutRes) {
+ super(parent, layoutRes);
+ }
+
+ void bindHolder(TT item, ItemCallback callback) {
+
+ }
+
+ @Override
+ public void bindHolder(TT item) {
+
+ }
+ }
+
+ interface ViewType {
+ int VIEW_TYPE_CURE = 1;
+
+ @IntDef(VIEW_TYPE_CURE)
+ @Retention(RetentionPolicy.SOURCE)
+ @interface CureViewType {
+ }
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/cure/CureContract.java b/app/src/main/java/com/gank/gankly/ui/cure/CureContract.java
new file mode 100644
index 00000000..64a988a6
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/cure/CureContract.java
@@ -0,0 +1,36 @@
+package com.gank.gankly.ui.cure;
+
+import android.content.Context;
+import android.ly.business.domain.Gift;
+import androidx.annotation.NonNull;
+
+import com.gank.gankly.mvp.base.LoadMorePresenter;
+import com.gank.gankly.mvp.base.PageView;
+
+import java.util.ArrayList;
+
+/**
+ * Create by LingYan on 2016-10-26
+ */
+
+public interface CureContract {
+ interface View extends PageView {
+ void setMaxProgress(int value);
+
+ void disProgressDialog();
+
+ void openBrowseActivity(ArrayList list);
+ }
+
+ abstract class Presenter extends LoadMorePresenter {
+ public Presenter(@NonNull Context context, View view) {
+ super(context, view);
+ }
+
+ abstract void refreshGirls();
+
+ abstract void appendGirls();
+
+ abstract void loadImages(String url);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/cure/CureFragment.java b/app/src/main/java/com/gank/gankly/ui/cure/CureFragment.java
new file mode 100644
index 00000000..6b42b25b
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/cure/CureFragment.java
@@ -0,0 +1,218 @@
+package com.gank.gankly.ui.cure;
+
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.ly.business.domain.Gift;
+import android.os.Bundle;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.gank.gankly.R;
+import com.gank.gankly.ui.base.LazyFragment;
+import com.gank.gankly.ui.gallery.GalleryActivity;
+import com.gank.gankly.widget.LySwipeRefreshLayout;
+import com.gank.gankly.widget.MultipleStatusView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+
+/**
+ * 妹子 - 清纯
+ * Create by LingYan on 2016-07-01
+ */
+public class CureFragment extends LazyFragment implements CureContract.View {
+ @BindView(R.id.multiple_status_view)
+ MultipleStatusView multipleStatusView;
+
+ @BindView(R.id.swipe_refresh)
+ LySwipeRefreshLayout swipeRefresh;
+
+ private CureAdapter cureAdapter;
+ private CureContract.Presenter curePresenter;
+
+ private ProgressDialog progressDialog;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_gift;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ cureAdapter = new CureAdapter();
+ cureAdapter.setOnItemClickListener(cureCallback);
+ swipeRefresh.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
+ swipeRefresh.setAdapter(cureAdapter);
+
+ swipeRefresh.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
+ @Override
+ public void onRefresh() {
+ initCureRefresh();
+ }
+
+ @Override
+ public void onLoadMore() {
+ curePresenter.appendGirls();
+ }
+ });
+ }
+
+ private void initCureRefresh() {
+ if (curePresenter != null) {
+ curePresenter.refreshGirls();
+ }
+ }
+
+ @Override
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ curePresenter = new CurePresenter(getContext(), this);
+ }
+
+ private final CureAdapter.ItemCallback cureCallback = new CureAdapter.ItemCallback() {
+ @Override
+ public void onItemClick(final String url) {
+ if (!TextUtils.isEmpty(url)) {
+ showLoadingDialog();
+ curePresenter.loadImages(url);
+ }
+ }
+ };
+
+ private void showLoadingDialog() {
+ if (progressDialog == null) {
+ progressDialog = new ProgressDialog(getContext());
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ progressDialog.setMessage(getContext().getString(R.string.loading_meizi_images));
+ progressDialog.setIndeterminate(true);
+ progressDialog.setCanceledOnTouchOutside(true);
+ progressDialog.setOnCancelListener(dialog -> curePresenter.destroy());
+ }
+
+ if (!progressDialog.isShowing()) {
+ progressDialog.show();
+ }
+ }
+
+ @Override
+ public void openBrowseActivity(@NonNull ArrayList list) {
+ Bundle bundle = new Bundle();
+ Intent intent = new Intent(getContext(), GalleryActivity.class);
+ bundle.putString(GalleryActivity.EXTRA_MODEL, GalleryActivity.EXTRA_DAILY);
+ intent.putExtra(GalleryActivity.EXTRA_LIST, list);
+ intent.putExtras(bundle);
+ getContext().startActivity(intent);
+ }
+
+ @Override
+ public void hideProgress() {
+ if (swipeRefresh != null && swipeRefresh.isRefreshing()) {
+ swipeRefresh.setRefreshing(false);
+ }
+ }
+
+ @Override
+ public void hasNoMoreDate() {
+
+ }
+
+ @Override
+ public void showProgress() {
+ if (swipeRefresh != null && !swipeRefresh.isRefreshing()) {
+ swipeRefresh.setRefreshing(true);
+ }
+ }
+
+ @Override
+ public void showContent() {
+ if (multipleStatusView != null) {
+ multipleStatusView.showContent();
+ }
+ }
+
+ @Override
+ public void showEmpty() {
+
+ }
+
+ @Override
+ public void showDisNetWork() {
+
+ }
+
+ @Override
+ public void showError() {
+
+ }
+
+ @Override
+ public void setMaxProgress(int value) {
+ if (progressDialog != null) {
+ progressDialog.setMax(value);
+ }
+ }
+
+ @Override
+ public void disProgressDialog() {
+ if (progressDialog != null && progressDialog.isShowing()) {
+ progressDialog.dismiss();
+ }
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ if (cureAdapter != null) {
+ cureAdapter.destroy();
+ }
+ if (curePresenter != null) {
+ curePresenter.destroy();
+ }
+ }
+
+ @Override
+ public void onLazyActivityCreate() {
+ initCureRefresh();
+ }
+
+ @Override
+ public void refreshSuccess(List list) {
+ if (list != null) {
+ if (cureAdapter != null) {
+ cureAdapter.refillItem(list);
+ cureAdapter.notifyDataSetChanged();
+ }
+ }
+ }
+
+ @Override
+ public void refreshFailure(String msg) {
+ shortToast(msg);
+ }
+
+ @Override
+ public void appendSuccess(List list) {
+ if (cureAdapter != null) {
+ if (list != null) {
+ cureAdapter.appendItem(list);
+ cureAdapter.notifyDataSetChanged();
+ }
+ }
+ }
+
+ @Override
+ public void appendFailure(String msg) {
+ shortToast(msg);
+ }
+
+ @Override
+ public void shortToast(String string) {
+
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/cure/CurePresenter.java b/app/src/main/java/com/gank/gankly/ui/cure/CurePresenter.java
new file mode 100644
index 00000000..479ae9d7
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/cure/CurePresenter.java
@@ -0,0 +1,193 @@
+package com.gank.gankly.ui.cure;
+
+import android.content.Context;
+import android.lectcoding.ui.logcat.Logcat;
+import android.ly.business.domain.Gift;
+import android.ly.business.domain.PageConfig;
+import android.ly.jsoup.JsoupServer;
+import android.text.TextUtils;
+
+import com.gank.gankly.utils.CrashUtils;
+import com.gank.gankly.utils.StringUtils;
+import com.leftcoding.rxbus.RxApiManager;
+
+import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
+
+import java.util.ArrayList;
+import java.util.IllegalFormatException;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import io.reactivex.disposables.Disposable;
+
+/**
+ * Create by LingYan on 2016-10-26
+ */
+
+class CurePresenter extends CureContract.Presenter {
+ private static final String BASE_URL = "http://www.mzitu.com/xinggan/";
+
+ private final ArrayList imagesList = new ArrayList<>();
+ private final AtomicBoolean destroyFlag = new AtomicBoolean(false);
+ private int maxPageNumber;
+ private PageConfig pageConfig = new PageConfig();
+
+ CurePresenter(Context context, CureContract.View view) {
+ super(context, view);
+ pageConfig.limit = 24;
+ }
+
+ @Override
+ void refreshGirls() {
+ fetchData(getUrl(pageConfig.getCurPage()));
+ }
+
+ @Override
+ void appendGirls() {
+ if (maxPageNumber >= pageConfig.getCurPage()) {
+ fetchData(getUrl(pageConfig.getCurPage()));
+ }
+ }
+
+ @Override
+ void loadImages(String url) {
+ Disposable disposable = JsoupServer.rxConnect(url).build()
+ .doFinally(() -> {
+ if (view != null) {
+ view.disProgressDialog();
+ }
+ })
+ .subscribe(document -> {
+ getDetailMaxPage(document);
+ getImagesList(document);
+ }, Logcat::e);
+ RxApiManager.get().add(requestTag, disposable);
+ }
+
+ private void fetchData(String url) {
+ if (destroyFlag.get()) {
+ return;
+ }
+
+ Disposable disposable = JsoupServer.rxConnect(url).build()
+ .doOnSubscribe(dis -> {
+ if (view != null) {
+ view.showProgress();
+ }
+ })
+ .doFinally(() -> {
+ if (view != null) {
+ view.hideProgress();
+ }
+ })
+ .subscribe(document -> {
+ maxPageNumber = getMaxPageNum(document);
+ List gifts = getPageLists(document);
+ if (gifts != null) {
+ if (view != null) {
+ if (pageConfig.isFirst()) {
+ view.refreshSuccess(gifts);
+ } else {
+ view.appendSuccess(gifts);
+ }
+ }
+ }
+ }, Logcat::e);
+ RxApiManager.get().add(requestTag, disposable);
+ }
+
+ /**
+ * 解析每面,封面入口地址
+ */
+ private List getPageLists(Document doc) {
+ List list = new ArrayList<>();
+ if (doc == null) {
+ return null;
+ }
+ Elements href = doc.select("#pins > li > a");
+ Elements img = doc.select("#pins a img");
+ Elements times = doc.select(".time");
+ Elements views = doc.select(".view");
+
+ final int countSize = href.size();
+ final int imgSize = img.size();
+ final int size = countSize > imgSize ? imgSize : countSize;
+
+ if (size > 0) {
+ for (int i = 0; i < size; i++) {
+ String imgUrl = img.get(i).attr("data-original");
+ String title = img.get(i).attr("alt");
+ String url = href.get(i).attr("href");
+ String time = times.get(i).text();
+ String view = views.get(i).text();
+ if (!TextUtils.isEmpty(imgUrl) && !TextUtils.isEmpty(url)) {
+ list.add(new Gift(imgUrl, url, time, view, title));
+ }
+ }
+ }
+ return list;
+ }
+
+ private int getMaxPageNum(Document doc) {
+ int p = 0;
+ if (doc != null) {
+ Elements count = doc.select(".nav-links a[href]");
+ int size = count.size();
+ if (size > 0) {
+ for (int i = size - 1; i >= 0; i--) {
+ String num = count.get(i).text();
+ if (StringUtils.isNumeric(num)) {
+ try {
+ return Integer.parseInt(num);
+ } catch (IllegalFormatException e) {
+ Logcat.e(e);
+ CrashUtils.crashReport(e);
+ }
+ }
+ }
+ }
+ }
+ return p;
+ }
+
+ private int getDetailMaxPage(Document doc) {
+ if (doc != null) {
+ Elements pages = doc.select(".pagenavi span");
+ if (pages != null && !pages.isEmpty()) {
+
+ }
+ }
+ return 0;
+ }
+
+ private void getImagesList(Document doc) {
+ imagesList.clear();
+ if (doc != null) {
+ Elements imgs = doc.select(".main-image a img");
+ if (imgs != null && imgs.size() > 0) {
+ for (int i = 0; i < imgs.size(); i++) {
+ String src = imgs.get(i).attr("src");
+ imagesList.add(new Gift(src));
+ }
+ }
+ }
+ }
+
+ private String getUrl(int page) {
+ return page == pageConfig.initPage ? BASE_URL : BASE_URL + "page/" + page;
+ }
+
+ @Override
+ public void destroy() {
+ if (destroyFlag.compareAndSet(false, true)) {
+ RxApiManager.get().clear(requestTag);
+ }
+ super.destroy();
+ }
+
+ @Override
+ protected void onDestroy() {
+
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlAdapter.java b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlAdapter.java
new file mode 100644
index 00000000..334b8f8f
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlAdapter.java
@@ -0,0 +1,115 @@
+package com.gank.gankly.ui.daily;
+
+import android.lectcoding.ui.adapter.BaseAdapter;
+import android.ly.business.domain.Girl;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.gank.gankly.R;
+import com.gank.gankly.butterknife.BindViewHolder;
+import com.gank.gankly.butterknife.ItemModel;
+import com.gank.gankly.listener.ItemClick;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+
+/**
+ * Create by LingYan on 2016-07-05
+ */
+public class DailyGirlAdapter extends BaseAdapter {
+ private ItemClick mMeiZiOnClick;
+ private List mGirlList = new ArrayList<>();
+
+ DailyGirlAdapter() {
+ setHasStableIds(true);
+ }
+
+ @Override
+ public DailyGirlAdapter.NormalViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ return new DailyGirlHolder(parent);
+ }
+
+ @Override
+ public void onBindViewHolder(NormalViewHolder holder, int position) {
+
+ }
+
+ public void setOnItemClickListener(ItemClick onItemClickListener) {
+ mMeiZiOnClick = onItemClickListener;
+ }
+
+ @Override
+ public int getItemCount() {
+ return mGirlList.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ void refillItem(List girlList) {
+ int size = mGirlList.size();
+ mGirlList.clear();
+ notifyItemRangeRemoved(0, size);
+ appendItem(girlList);
+ }
+
+ public void appendItem(List girlList) {
+ mGirlList.addAll(girlList);
+ notifyItemRangeInserted(getItemCount(), girlList.size());
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+ public static class DailyGirlHolder extends NormalViewHolder implements View.OnClickListener {
+ static final int LAYOUT = R.layout.adapter_daily_girl;
+
+ @BindView(R.id.title)
+ TextView txtTitle;
+
+ Girl girl;
+
+ public DailyGirlHolder(ViewGroup parent) {
+ super(parent, LAYOUT);
+ }
+
+ @Override
+ public void onClick(View v) {
+ }
+
+ @Override
+ public void bindHolder(NormalItem item) {
+
+ }
+ }
+
+ static class NormalItem extends ItemModel {
+
+ @Override
+ public int getViewType() {
+ return 0;
+ }
+ }
+
+ abstract static class NormalViewHolder extends BindViewHolder {
+
+ public NormalViewHolder(ViewGroup parent, int layoutRes) {
+ super(parent, layoutRes);
+ }
+
+ void bindHolder(TT item, ItemCallback callback) {
+
+ }
+ }
+
+ interface ItemCallback {
+ void onItemClick(Girl girl);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlContract.java b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlContract.java
new file mode 100644
index 00000000..83c89b42
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlContract.java
@@ -0,0 +1,38 @@
+package com.gank.gankly.ui.daily;
+
+import android.content.Context;
+import android.ly.business.domain.Gift;
+import androidx.annotation.NonNull;
+
+import android.ly.business.domain.Girl;
+import com.gank.gankly.mvp.base.LoadMorePresenter;
+import com.gank.gankly.mvp.base.SupportView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Create by LingYan on 2016-10-26
+ */
+
+public interface DailyGirlContract {
+ interface View extends SupportView {
+ void refillData(List list);
+
+ void appendItem(List list);
+
+ void setMaxProgress(int value);
+
+ void disProgressDialog();
+
+ void openBrowseActivity(ArrayList list);
+ }
+
+ abstract class Presenter extends LoadMorePresenter {
+ public Presenter(@NonNull Context context, View view) {
+ super(context, view);
+ }
+
+ abstract void girlsImages(String url);
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlFragment.java b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlFragment.java
new file mode 100644
index 00000000..95f58eb5
--- /dev/null
+++ b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlFragment.java
@@ -0,0 +1,193 @@
+package com.gank.gankly.ui.daily;
+
+import android.app.ProgressDialog;
+import android.content.Intent;
+import android.ly.business.domain.Gift;
+import android.ly.business.domain.Girl;
+import android.os.Bundle;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import android.view.View;
+
+import com.gank.gankly.R;
+import com.gank.gankly.listener.ItemClick;
+import com.gank.gankly.ui.base.LazyFragment;
+import com.gank.gankly.ui.gallery.GalleryActivity;
+import com.gank.gankly.widget.LySwipeRefreshLayout;
+import com.gank.gankly.widget.MultipleStatusView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+
+/**
+ * 妹子 - 每日更新
+ * Create by LingYan on 2016-07-01
+ */
+public class DailyGirlFragment extends LazyFragment implements DailyGirlContract.View {
+ @BindView(R.id.multiple_status_view)
+ MultipleStatusView multipleStatusView;
+
+ @BindView(R.id.swipe_refresh)
+ LySwipeRefreshLayout swipeRefresh;
+
+ private DailyGirlAdapter dailyGirlAdapter;
+ private DailyGirlPresenter dailyPresenter;
+
+ private ProgressDialog mDialog;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_gift;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ dailyGirlAdapter = new DailyGirlAdapter();
+ swipeRefresh.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
+ swipeRefresh.setAdapter(dailyGirlAdapter);
+
+ swipeRefresh.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
+ @Override
+ public void onRefresh() {
+ dailyPresenter.fetchNew();
+ }
+
+ @Override
+ public void onLoadMore() {
+ }
+ });
+
+ dailyGirlAdapter.setOnItemClickListener(new ItemClick() {
+ @Override
+ public void onClick(int position, Object object) {
+
+ }
+ });
+
+ }
+
+ private void showLoadingDialog() {
+ if (mDialog == null) {
+ mDialog = new ProgressDialog(getContext());
+ }
+
+ mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ mDialog.setMessage(getContext().getString(R.string.loading_meizi_images));
+ mDialog.setIndeterminate(true);
+ mDialog.setCanceledOnTouchOutside(true);
+ mDialog.setOnCancelListener(dialog -> dailyPresenter.destroy());
+
+ if (!mDialog.isShowing()) {
+ mDialog.show();
+ }
+ }
+
+ @Override
+ public void openBrowseActivity(@NonNull ArrayList list) {
+ Bundle bundle = new Bundle();
+ Intent intent = new Intent(getContext(), GalleryActivity.class);
+ bundle.putString(GalleryActivity.EXTRA_MODEL, GalleryActivity.EXTRA_DAILY);
+ intent.putExtra(GalleryActivity.EXTRA_LIST, list);
+ intent.putExtras(bundle);
+ getContext().startActivity(intent);
+ }
+
+ @Override
+ public void hideProgress() {
+ swipeRefresh.setRefreshing(false);
+ }
+
+ @Override
+ public void hasNoMoreDate() {
+
+ }
+
+ @Override
+ public void showProgress() {
+
+ }
+
+ @Override
+ public void showContent() {
+ multipleStatusView.showContent();
+ }
+
+ @Override
+ public void showEmpty() {
+
+ }
+
+ @Override
+ public void showDisNetWork() {
+
+ }
+
+ @Override
+ public void showError() {
+
+ }
+
+ private void showLoading() {
+ if (swipeRefresh != null) {
+ swipeRefresh.setRefreshing(true);
+ }
+ }
+
+// @Override
+ public void onClick(int position, Object object) {
+// DailyGirl dailyGirl = (DailyGirl) object;
+// String url = dailyGirl.getUrl();
+// if (!TextUtils.isEmpty(url)) {
+// showLoadingDialog();
+// dailyPresenter.girlsImages(url);
+// }
+ }
+
+ @Override
+ public void refillData(List list) {
+ dailyGirlAdapter.refillItem(list);
+ }
+
+ @Override
+ public void appendItem(List list) {
+ dailyGirlAdapter.appendItem(list);
+ }
+
+ @Override
+ public void setMaxProgress(int value) {
+ if (mDialog != null) {
+ mDialog.setMax(value);
+ }
+ }
+
+ @Override
+ public void disProgressDialog() {
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ }
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ if (dailyGirlAdapter != null) {
+ dailyGirlAdapter.destroy();
+ }
+ }
+
+ @Override
+ public void onLazyActivityCreate() {
+ dailyPresenter = new DailyGirlPresenter(getContext(), this);
+ multipleStatusView.showLoading();
+ dailyPresenter.fetchNew();
+ }
+
+ @Override
+ public void shortToast(String string) {
+
+ }
+}
diff --git a/app/src/main/java/com/gank/gankly/ui/girls/dailymeizi/DailyMeiziPresenter.java b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlPresenter.java
similarity index 81%
rename from app/src/main/java/com/gank/gankly/ui/girls/dailymeizi/DailyMeiziPresenter.java
rename to app/src/main/java/com/gank/gankly/ui/daily/DailyGirlPresenter.java
index 3c6ca381..ebd567b4 100644
--- a/app/src/main/java/com/gank/gankly/ui/girls/dailymeizi/DailyMeiziPresenter.java
+++ b/app/src/main/java/com/gank/gankly/ui/daily/DailyGirlPresenter.java
@@ -1,9 +1,10 @@
-package com.gank.gankly.ui.girls.dailymeizi;
+package com.gank.gankly.ui.daily;
-import com.gank.gankly.bean.DailyMeiziBean;
-import com.gank.gankly.bean.GiftBean;
-import com.gank.gankly.mvp.FetchPresenter;
-import com.gank.gankly.mvp.source.remote.MeiziDataSource;
+import android.content.Context;
+import android.ly.business.domain.Gift;
+import android.ly.jsoup.JsoupServer;
+
+import android.ly.business.domain.Girl;
import com.gank.gankly.utils.ListUtils;
import com.socks.library.KLog;
@@ -18,46 +19,44 @@
/**
* Create by LingYan on 2016-10-26
- * Email:137387869@qq.com
*/
-public class DailyMeiziPresenter extends FetchPresenter implements DailyMeiziContract.Presenter {
+public class DailyGirlPresenter extends DailyGirlContract.Presenter {
private static final String MEIZI_FIRST_URL = "http://m.mzitu.com/all";
- private final MeiziDataSource mTask;
- private final DailyMeiziContract.View mModelView;
- private ArrayList imagesList;
+ private final DailyGirlContract.View mModelView;
+ private ArrayList imagesList;
private int max;
- public DailyMeiziPresenter(MeiziDataSource task, DailyMeiziContract.View view) {
- mTask = task;
+ public DailyGirlPresenter(Context context, DailyGirlContract.View view) {
+ super(context, view);
mModelView = view;
}
- @Override
+// @Override
public void fetchNew() {
- setFetchLimit(24);
+// setFetchLimit(24);
fetchData(MEIZI_FIRST_URL);
}
- @Override
+// @Override
public void fetchMore() {
//empty
}
private void fetchData(String url) {
- mTask.fetchDaily(url)
+ JsoupServer.rxConnect(url).build()
.subscribe(new Observer() {
@Override
public void onComplete() {
- setFetchPage(getFetchPage() + 1);
+// setFetchPage(getFetchPage() + 1);
mModelView.showContent();
- mModelView.hideRefresh();
+ mModelView.hideProgress();
}
@Override
public void onError(Throwable e) {
KLog.e(e);
- parseError(mModelView);
+// parseError(mModelView);
}
@Override
@@ -73,18 +72,18 @@ public void onNext(Document document) {
}
@Override
- public void subscribe() {
+ public void destroy() {
//empty
}
@Override
- public void unSubscribe() {
- //empty
+ protected void onDestroy() {
+
}
@Override
public void girlsImages(final String url) {
- mTask.fetchDailyDays(url)
+ JsoupServer.rxConnect(url).build()
.map(document -> {
max = getImageUrlsMax(document);
if (max > 0) {
@@ -117,7 +116,7 @@ public void onNext(String url) {
}
private void getImages(String url) {
- mTask.fetchDailyDetailUrls(url)
+ JsoupServer.rxConnect(url).build()
.map(document -> getImageCountList(document))
.subscribe(new Observer() {
@Override
@@ -166,7 +165,7 @@ public void onNext(String url) {
number = String.valueOf(i);
}
lastUrl = baseUrl + name + number + endType;
- imagesList.add(new GiftBean(lastUrl));
+ imagesList.add(new Gift(lastUrl));
}
}
});
@@ -174,9 +173,9 @@ public void onNext(String url) {
private void parseDocument(Document document) {
if (document != null) {
- List list = getDays(document);
- list = filterData(list, mModelView);
- if (ListUtils.getListSize(list) > 0) {
+ List list = getDays(document);
+// list = filterData(list, mModelView);
+ if (ListUtils.getSize(list) > 0) {
mModelView.refillData(list);
}
}
@@ -185,13 +184,13 @@ private void parseDocument(Document document) {
/**
* 筛选过滤得到月份集合
*/
- private List getDays(Document doc) {
- List list = new ArrayList<>();
+ private List getDays(Document doc) {
+ List list = new ArrayList<>();
if (doc != null) {
Elements times = doc.select(".post-content .archive-brick");
Elements a_href = doc.select(".post-content .archive-brick a");
for (int i = 0; i < a_href.size(); i++) {
- list.add(new DailyMeiziBean(a_href.get(i).attr("href"), times.get(i).text()));
+ list.add(new Girl(a_href.get(i).attr("href"), times.get(i).text()));
}
}
return list;
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/DiscoveredFragment.java b/app/src/main/java/com/gank/gankly/ui/discovered/DiscoveredFragment.java
index f29e7914..30ee08cb 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/DiscoveredFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/DiscoveredFragment.java
@@ -2,15 +2,19 @@
import android.content.Context;
import android.content.res.Resources;
-import android.support.design.widget.TabLayout;
-import android.support.v4.view.ViewPager;
+import android.os.Bundle;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import com.google.android.material.tabs.TabLayout;
+import androidx.viewpager.widget.ViewPager;
import android.util.TypedValue;
+import android.view.View;
-import com.gank.gankly.App;
import com.gank.gankly.R;
+import com.gank.gankly.butterknife.ButterKnifeFragment;
import com.gank.gankly.rxjava.RxBus_;
import com.gank.gankly.rxjava.theme.ThemeEvent;
-import com.gank.gankly.ui.base.BaseSwipeRefreshFragment;
+import com.gank.gankly.ui.MainActivity;
import com.gank.gankly.ui.base.LazyFragment;
import com.gank.gankly.ui.discovered.jiandan.JiandanFragment;
import com.gank.gankly.ui.discovered.more.DiscoveredAdapter;
@@ -18,7 +22,6 @@
import com.gank.gankly.ui.discovered.teamBlog.TeamBlogFragment;
import com.gank.gankly.ui.discovered.technology.TechnologyFragment;
import com.gank.gankly.ui.discovered.video.VideoFragment;
-import com.gank.gankly.ui.main.MainActivity;
import java.util.ArrayList;
import java.util.List;
@@ -29,9 +32,8 @@
/**
* 发现
* Create by LingYan on 2016-07-01
- * Email:137387869@qq.com
*/
-public class DiscoveredFragment extends BaseSwipeRefreshFragment implements ViewPager.OnPageChangeListener {
+public class DiscoveredFragment extends ButterKnifeFragment implements ViewPager.OnPageChangeListener {
private static final String TYPE_VIDEO = "视频";
private static final String TYPE_JIANDAN = "新鲜事";
private static final String TYPE_THCHNOLOGY = "科技资讯";
@@ -54,20 +56,13 @@ protected int getLayoutId() {
}
@Override
- protected void initViews() {
-
- }
-
- @Override
- protected void bindListener() {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
mDisposable = RxBus_.getInstance().toObservable(ThemeEvent.class)
.subscribe(themeEvent -> {
refreshUi();
});
- }
- @Override
- protected void initValues() {
List mList = new ArrayList<>();
mList.add(new VideoFragment());
mList.add(new JiandanFragment());
@@ -98,7 +93,7 @@ private void initTabLayout() {
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabMode(TabLayout.MODE_FIXED);
- mTabLayout.setSelectedTabIndicatorColor(App.getAppColor(R.color.white));
+ mTabLayout.setSelectedTabIndicatorColor(getContext().getResources().getColor(R.color.white));
}
private void refreshUi() {
@@ -127,21 +122,6 @@ public void onAttach(Context context) {
mActivity = (MainActivity) context;
}
- @Override
- public void onResume() {
- super.onResume();
- }
-
- @Override
- protected void initPresenter() {
-
- }
-
- @Override
- protected void callBackRefreshUi() {
-
- }
-
@Override
public void onDestroyView() {
super.onDestroyView();
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanAdapter.java b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanAdapter.java
index 2898e681..6f1c9c86 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanAdapter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanAdapter.java
@@ -1,7 +1,7 @@
package com.gank.gankly.ui.discovered.jiandan;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -21,14 +21,13 @@
/**
* Create by LingYan on 2016-07-20
- * Email:137387869@qq.com
*/
public class JiandanAdapter extends RecyclerView.Adapter {
private final List mList;
private ItemClick mMeiZiOnClick;
private Context mContext;
- public JiandanAdapter() {
+ JiandanAdapter() {
mList = new ArrayList<>();
}
@@ -55,7 +54,7 @@ public void setListener(ItemClick mMeiZiOnClick) {
this.mMeiZiOnClick = mMeiZiOnClick;
}
- public void updateItem(List list) {
+ void updateItem(List list) {
mList.clear();
appendItem(list);
}
@@ -86,7 +85,7 @@ public class JiandanHolder extends RecyclerView.ViewHolder implements View.OnCli
private JianDanBean bean;
- public JiandanHolder(View itemView) {
+ JiandanHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
itemView.setOnClickListener(this);
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanContract.java b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanContract.java
index 1866c1ef..279394a9 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanContract.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanContract.java
@@ -1,24 +1,29 @@
package com.gank.gankly.ui.discovered.jiandan;
+import android.content.Context;
+import androidx.annotation.NonNull;
+
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.IFetchPresenter;
-import com.gank.gankly.mvp.IFetchView;
+import com.gank.gankly.mvp.base.LoadMorePresenter;
+import com.gank.gankly.mvp.base.SupportView;
import java.util.List;
/**
* Create by LingYan on 2016-11-21
- * Email:137387869@qq.com
*/
public interface JiandanContract {
- interface View extends IFetchView {
+ interface View extends SupportView {
void refillData(List list);
void appendMoreDate(List list);
}
- interface Presenter extends IFetchPresenter {
+ abstract class Presenter extends LoadMorePresenter {
+ public Presenter(@NonNull Context context, View view) {
+ super(context, view);
+ }
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanFragment.java b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanFragment.java
index b576f933..ccef7657 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanFragment.java
@@ -3,8 +3,10 @@
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
@@ -14,9 +16,8 @@
import com.gank.gankly.bean.JianDanBean;
import com.gank.gankly.config.Constants;
import com.gank.gankly.listener.ItemClick;
-import com.gank.gankly.mvp.source.remote.JiandanDataSource;
+import com.gank.gankly.ui.MainActivity;
import com.gank.gankly.ui.base.LazyFragment;
-import com.gank.gankly.ui.main.MainActivity;
import com.gank.gankly.ui.web.JiandanWebActivity;
import com.gank.gankly.utils.StyleUtils;
import com.gank.gankly.widget.LySwipeRefreshLayout;
@@ -30,7 +31,6 @@
/**
* 新鲜事
* Create by LingYan on 2016-11-18
- * Email:137387869@qq.com
*/
public class JiandanFragment extends LazyFragment implements JiandanContract.View, ItemClick {
@@ -57,18 +57,8 @@ protected int getLayoutId() {
}
@Override
- protected void initData() {
- mMultipleStatusView.showLoading();
- mPresenter.fetchNew();
- }
-
- @Override
- protected void initViews() {
-
- }
-
- @Override
- protected void bindListener() {
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
mAdapter = new JiandanAdapter();
mAdapter.setListener(this);
mSwipeRefreshLayout.setLayoutManager(new LinearLayoutManager(mActivity));
@@ -77,30 +67,30 @@ protected void bindListener() {
mSwipeRefreshLayout.getRecyclerView().setHasFixedSize(true);
mSwipeRefreshLayout.getRecyclerView().addItemDecoration(new MyDecoration(mActivity, LinearLayoutManager.HORIZONTAL));
// mSwipeRefreshLayout.setColorSchemeColors(App.getAppColor(R.color.colorPrimary));
- mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefRecyclerViewListener() {
+ mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
@Override
public void onRefresh() {
- mPresenter.fetchNew();
+// mPresenter.fetchNew();
}
@Override
public void onLoadMore() {
- mPresenter.fetchMore();
+// mPresenter.fetchMore();
}
});
}
@Override
- protected void initValues() {
- setSwipeRefreshLayout(mSwipeRefreshLayout);
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+// mPresenter = new JiandanPresenter(JiandanDataSource.getInstance(), this);
}
@Override
- protected void initPresenter() {
- mPresenter = new JiandanPresenter(JiandanDataSource.getInstance(), this);
+ public void onLazyActivityCreate() {
+
}
- @Override
protected void callBackRefreshUi() {
Resources.Theme theme = mActivity.getTheme();
TypedValue typedValue = new TypedValue();
@@ -141,7 +131,7 @@ public void appendMoreDate(List list) {
}
@Override
- public void showRefresh() {
+ public void showProgress() {
mSwipeRefreshLayout.setRefreshing(true);
}
@@ -151,15 +141,10 @@ public void hasNoMoreDate() {
}
@Override
- public void hideRefresh() {
+ public void hideProgress() {
mSwipeRefreshLayout.setRefreshing(false);
}
- @Override
- public void showRefreshError(String errorStr) {
-
- }
-
@Override
public void showContent() {
mMultipleStatusView.showContent();
@@ -180,9 +165,10 @@ public void showError() {
mMultipleStatusView.showError();
}
- @Override
- public void showLoading() {
- mMultipleStatusView.showLoading();
+ private void showLoading() {
+ if (mMultipleStatusView != null) {
+ mMultipleStatusView.showLoading();
+ }
}
@Override
@@ -195,4 +181,9 @@ public void onClick(int position, Object object) {
bundle.putString(JiandanWebActivity.AUTHOR, bean.getType());
JiandanWebActivity.startWebActivity(mActivity, bundle);
}
+
+ @Override
+ public void shortToast(String string) {
+
+ }
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanPresenter.java b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanPresenter.java
index a77e8efc..8406a7bf 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanPresenter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/jiandan/JiandanPresenter.java
@@ -1,9 +1,9 @@
package com.gank.gankly.ui.discovered.jiandan;
+import android.content.Context;
+import android.ly.jsoup.JsoupServer;
+
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.FetchPresenter;
-import com.gank.gankly.mvp.source.remote.JiandanDataSource;
-import com.gank.gankly.utils.ListUtils;
import com.socks.library.KLog;
import org.jsoup.nodes.Document;
@@ -13,45 +13,36 @@
import java.util.List;
import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
/**
* Create by LingYan on 2016-11-21
- * Email:137387869@qq.com
*/
-public class JiandanPresenter extends FetchPresenter implements JiandanContract.Presenter {
+public class JiandanPresenter extends JiandanContract.Presenter {
private static final String BASE_URL = "http://i.jandan.net/page/";
private static final int LIMIT = 24;
- private JiandanDataSource mJiandanDataSource;
private JiandanContract.View mView;
- public JiandanPresenter(JiandanDataSource jiandanDataSource, JiandanContract.View view) {
- mJiandanDataSource = jiandanDataSource;
- mView = view;
- setFetchLimit(LIMIT);
+ public JiandanPresenter(Context context, JiandanContract.View view) {
+ super(context, view);
}
@Override
- public void subscribe() {
+ public void destroy() {
}
@Override
- public void unSubscribe() {
+ protected void onDestroy() {
}
public void fetchData(int page) {
String url = BASE_URL + page;
- mJiandanDataSource.jsoupUrlData(url)
- .subscribeOn(Schedulers.io())
- .unsubscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
+ JsoupServer.rxConnect(url).build()
.map(document -> mapResult(document))
.subscribe(new Observer>() {
@Override
@@ -62,8 +53,8 @@ public void onError(Throwable e) {
@Override
public void onComplete() {
mView.showContent();
- int nextPage = getFetchPage() + 1;
- setFetchPage(nextPage);
+// int nextPage = getFetchPage() + 1;
+// setFetchPage(nextPage);
}
@Override
@@ -73,14 +64,14 @@ public void onSubscribe(Disposable d) {
@Override
public void onNext(List list) {
- list = filterData(list, mView);
- if (ListUtils.getListSize(list) > 0) {
- if (getFetchPage() > 1) {
- mView.appendMoreDate(list);
- } else {
- mView.refillData(list);
- }
- }
+// list = filterData(list, mView);
+// if (ListUtils.getSize(list) > 0) {
+// if (getFetchPage() > 1) {
+// mView.appendMoreDate(list);
+// } else {
+// mView.refillData(list);
+// }
+// }
}
});
}
@@ -112,16 +103,16 @@ private List mapResult(Document doc) {
return list;
}
- @Override
- public void fetchNew() {
- fetchData(getInitPage());
- }
-
- @Override
- public void fetchMore() {
- if (hasMore()) {
- mView.showRefresh();
- fetchData(getFetchPage());
- }
- }
+// @Override
+// public void fetchNew() {
+// fetchData(getInitPage());
+// }
+//
+// @Override
+// public void fetchMore() {
+// if (hasMore()) {
+// mView.showProgress();
+// fetchData(getFetchPage());
+// }
+// }
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredAdapter.java b/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredAdapter.java
index b117fc85..65471750 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredAdapter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredAdapter.java
@@ -1,8 +1,8 @@
package com.gank.gankly.ui.discovered.more;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
import com.gank.gankly.ui.base.LazyFragment;
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredMoreFragment.java b/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredMoreFragment.java
index e1a11cbc..2e449f42 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredMoreFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/more/DiscoveredMoreFragment.java
@@ -5,9 +5,9 @@
import android.widget.LinearLayout;
import com.gank.gankly.R;
+import com.gank.gankly.ui.MainActivity;
import com.gank.gankly.ui.baisi.BaiSiActivity;
import com.gank.gankly.ui.base.LazyFragment;
-import com.gank.gankly.ui.main.MainActivity;
import com.gank.gankly.utils.theme.ThemeColor;
import butterknife.BindView;
@@ -15,7 +15,6 @@
/**
* Create by LingYan on 2016-12-02
- * Email:137387869@qq.com
*/
public class DiscoveredMoreFragment extends LazyFragment {
@@ -30,17 +29,6 @@ public void onAttach(Context context) {
mActivity = (MainActivity) context;
}
- @Override
- protected void initData() {
-
- }
-
- @Override
- protected void initPresenter() {
-
- }
-
- @Override
protected void callBackRefreshUi() {
ThemeColor color = new ThemeColor(this);
color.setBackgroundResource(R.attr.themeBackground, mLinearLayout);
@@ -52,24 +40,14 @@ protected int getLayoutId() {
return R.layout.fragment_discovered_more;
}
- @Override
- protected void initValues() {
-
- }
-
- @Override
- protected void initViews() {
-
- }
-
- @Override
- protected void bindListener() {
-
- }
-
@OnClick(R.id.discovered_rl_budejie)
void onClickBuDeJie() {
mActivity.startActivity(new Intent(mActivity, BaiSiActivity.class));
mActivity.overridePendingTransition(0, 0);
}
+
+ @Override
+ public void onLazyActivityCreate() {
+
+ }
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogAdapter.java b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogAdapter.java
index 8a858ffb..9f4f6a82 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogAdapter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogAdapter.java
@@ -1,7 +1,7 @@
package com.gank.gankly.ui.discovered.teamBlog;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -21,7 +21,6 @@
/**
* Create by LingYan on 2016-07-20
- * Email:137387869@qq.com
*/
public class TeamBlogAdapter extends RecyclerView.Adapter {
private final List mList;
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogContract.java b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogContract.java
index f574cec3..062894e7 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogContract.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogContract.java
@@ -1,24 +1,23 @@
package com.gank.gankly.ui.discovered.teamBlog;
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.IFetchPresenter;
-import com.gank.gankly.mvp.IFetchView;
+import com.gank.gankly.mvp.ILoadMorePresenter;
+import com.gank.gankly.mvp.base.SupportView;
import java.util.List;
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
public interface TeamBlogContract {
- interface View extends IFetchView {
+ interface View extends SupportView {
void refillData(List list);
void appendData(List list);
}
- interface Presenter extends IFetchPresenter {
+ interface Presenter extends ILoadMorePresenter {
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogFragment.java b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogFragment.java
index f2ed847a..48ff5001 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogFragment.java
@@ -3,17 +3,19 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.View;
import com.gank.gankly.R;
import com.gank.gankly.bean.JianDanBean;
import com.gank.gankly.config.Constants;
import com.gank.gankly.listener.ItemClick;
-import com.gank.gankly.mvp.source.remote.TeamBlogDataSource;
+import com.gank.gankly.ui.MainActivity;
import com.gank.gankly.ui.base.LazyFragment;
import com.gank.gankly.ui.discovered.technology.TechnologyContract;
-import com.gank.gankly.ui.main.MainActivity;
import com.gank.gankly.ui.web.JiandanWebActivity;
import com.gank.gankly.ui.web.normal.WebActivity;
import com.gank.gankly.utils.theme.RecyclerViewColor;
@@ -27,7 +29,6 @@
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
public class TeamBlogFragment extends LazyFragment implements TechnologyContract.View, ItemClick {
@@ -48,14 +49,20 @@ public void onAttach(Context context) {
}
@Override
- protected void initData() {
- showRefresh();
- mPresenter.fetchNew();
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initValues();
}
@Override
- protected void initPresenter() {
- mPresenter = new TeamBlogPresenter(TeamBlogDataSource.getInstance(), this);
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+// mPresenter = new TeamBlogPresenter(TeamBlogDataSource.getInstance(), this);
+ }
+
+ @Override
+ public void onLazyActivityCreate() {
+
}
@Override
@@ -63,47 +70,33 @@ protected int getLayoutId() {
return R.layout.layout_swipe_normal;
}
- @Override
protected void initValues() {
- setSwipeRefreshLayout(mSwipeRefreshLayout);
-// setMultipleStatusView(mMultipleStatusView);
-
mAdapter = new TeamBlogAdapter();
mAdapter.setListener(this);
mSwipeRefreshLayout.setAdapter(mAdapter);
mRecyclerView = mSwipeRefreshLayout.getRecyclerView();
mSwipeRefreshLayout.setLayoutManager(new LinearLayoutManager(mActivity));
- mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefRecyclerViewListener() {
+ mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
@Override
public void onRefresh() {
- mPresenter.fetchNew();
+// mPresenter.fetchNew();
}
@Override
public void onLoadMore() {
- mPresenter.fetchMore();
+// mPresenter.fetchMore();
}
});
}
@Override
- protected void initViews() {
-
- }
-
- @Override
- protected void bindListener() {
-
- }
-
- @Override
- public void showRefresh() {
+ public void showProgress() {
mSwipeRefreshLayout.setRefreshing(true);
}
@Override
- public void hideRefresh() {
+ public void hideProgress() {
mSwipeRefreshLayout.setRefreshing(false);
}
@@ -132,16 +125,6 @@ public void showError() {
}
- @Override
- public void showLoading() {
-
- }
-
- @Override
- public void showRefreshError(String errorStr) {
-
- }
-
@Override
public void refillData(List list) {
mAdapter.updateItem(list);
@@ -165,7 +148,6 @@ public void onClick(int position, Object object) {
JiandanWebActivity.startWebActivity(mActivity, bundle);
}
- @Override
protected void callBackRefreshUi() {
RecyclerViewColor recyclerViewColor = new RecyclerViewColor(mRecyclerView);
recyclerViewColor.setItemBackgroundColor(R.id.team_ll_body, R.attr.lyItemSelectBackground);
@@ -177,4 +159,9 @@ protected void callBackRefreshUi() {
themeColor.recyclerViewColor(recyclerViewColor);
themeColor.start();
}
+
+ @Override
+ public void shortToast(String string) {
+
+ }
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogPresenter.java b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogPresenter.java
index 856e9602..7709a1a1 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogPresenter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/teamBlog/TeamBlogPresenter.java
@@ -1,7 +1,9 @@
package com.gank.gankly.ui.discovered.teamBlog;
+import android.content.Context;
+import android.ly.jsoup.JsoupServer;
+
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.FetchPresenter;
import com.gank.gankly.mvp.source.remote.TeamBlogDataSource;
import com.gank.gankly.ui.discovered.technology.TechnologyContract;
import com.socks.library.KLog;
@@ -17,36 +19,28 @@
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
-public class TeamBlogPresenter extends FetchPresenter implements TechnologyContract.Presenter {
+public class TeamBlogPresenter extends TechnologyContract.Presenter {
private TeamBlogDataSource mTask;
private TechnologyContract.View mView;
- public TeamBlogPresenter(TeamBlogDataSource task, TechnologyContract.View view) {
- mTask = task;
- mView = view;
- }
-
- @Override
- public void fetchNew() {
- fetchData(getInitPage());
+ TeamBlogPresenter(Context context, TechnologyContract.View view) {
+ super(context, view);
}
private void fetchData(int page) {
- mTask.fetchData(page).subscribe(new Observer() {
+ String url = "";
+ JsoupServer.rxConnect(url).build().subscribe(new Observer() {
@Override
public void onComplete() {
mView.showContent();
- mView.hideRefresh();
- int nextPage = getFetchPage() + 1;
- setFetchPage(nextPage);
+ mView.hideProgress();
}
@Override
public void onError(Throwable e) {
- mView.hideRefresh();
+ mView.hideProgress();
KLog.e(e);
}
@@ -58,13 +52,6 @@ public void onSubscribe(Disposable d) {
@Override
public void onNext(Document document) {
List list = parseDocument(document);
- if (list.size() > 0) {
- if (getFetchPage() > 1) {
- mView.appendData(list);
- } else {
- mView.refillData(list);
- }
- }
}
});
}
@@ -92,20 +79,12 @@ private List parseDocument(Document document) {
}
@Override
- public void fetchMore() {
- if (hasMore()) {
- mView.showRefresh();
- fetchData(getFetchPage());
- }
- }
-
- @Override
- public void subscribe() {
+ public void destroy() {
}
@Override
- public void unSubscribe() {
+ protected void onDestroy() {
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyAdapter.java b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyAdapter.java
index d1ec4168..2cc71d97 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyAdapter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyAdapter.java
@@ -1,7 +1,7 @@
package com.gank.gankly.ui.discovered.technology;
import android.content.Context;
-import android.support.v7.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -21,7 +21,6 @@
/**
* Create by LingYan on 2016-07-20
- * Email:137387869@qq.com
*/
public class TechnologyAdapter extends RecyclerView.Adapter {
private final List mList;
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyContract.java b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyContract.java
index 6b505957..76fc0823 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyContract.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyContract.java
@@ -1,24 +1,29 @@
package com.gank.gankly.ui.discovered.technology;
+import android.content.Context;
+import androidx.annotation.NonNull;
+
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.IFetchPresenter;
-import com.gank.gankly.mvp.IFetchView;
+import com.gank.gankly.mvp.base.LoadMorePresenter;
+import com.gank.gankly.mvp.base.SupportView;
import java.util.List;
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
public interface TechnologyContract {
- interface View extends IFetchView {
+ interface View extends SupportView {
void refillData(List list);
void appendData(List list);
}
- interface Presenter extends IFetchPresenter {
+ abstract class Presenter extends LoadMorePresenter {
+ public Presenter(@NonNull Context context, View view) {
+ super(context, view);
+ }
}
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyFragment.java b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyFragment.java
index 6d85101c..352846f7 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyFragment.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyFragment.java
@@ -3,16 +3,18 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import android.view.View;
import com.gank.gankly.R;
import com.gank.gankly.bean.JianDanBean;
import com.gank.gankly.config.Constants;
import com.gank.gankly.listener.ItemClick;
-import com.gank.gankly.mvp.source.remote.TechnologyDataSource;
+import com.gank.gankly.ui.MainActivity;
import com.gank.gankly.ui.base.LazyFragment;
-import com.gank.gankly.ui.main.MainActivity;
import com.gank.gankly.ui.web.normal.WebActivity;
import com.gank.gankly.utils.theme.RecyclerViewColor;
import com.gank.gankly.utils.theme.ThemeColor;
@@ -25,7 +27,6 @@
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
public class TechnologyFragment extends LazyFragment implements TechnologyContract.View, ItemClick {
@@ -39,6 +40,11 @@ public class TechnologyFragment extends LazyFragment implements TechnologyContra
private TechnologyContract.Presenter mPresenter;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.layout_swipe_normal;
+ }
+
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -46,62 +52,49 @@ public void onAttach(Context context) {
}
@Override
- protected void initData() {
- showRefresh();
- mPresenter.fetchNew();
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initValues();
}
@Override
- protected void initPresenter() {
- mPresenter = new TechnologyPresenter(TechnologyDataSource.getInstance(), this);
+ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+// mPresenter = new TechnologyPresenter(TechnologyDataSource.getInstance(), this);
}
@Override
- protected int getLayoutId() {
- return R.layout.layout_swipe_normal;
- }
+ public void onLazyActivityCreate() {
- @Override
- protected void initValues() {
- setSwipeRefreshLayout(mSwipeRefreshLayout);
-// setMultipleStatusView(mMultipleStatusView);
+ }
+ private void initValues() {
mAdapter = new TechnologyAdapter();
mAdapter.setListener(this);
mSwipeRefreshLayout.setAdapter(mAdapter);
mRecyclerView = mSwipeRefreshLayout.getRecyclerView();
mSwipeRefreshLayout.setLayoutManager(new LinearLayoutManager(mActivity));
- mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefRecyclerViewListener() {
+ mSwipeRefreshLayout.setOnScrollListener(new LySwipeRefreshLayout.OnSwipeRefreshListener() {
@Override
public void onRefresh() {
- mPresenter.fetchNew();
+// mPresenter.fetchNew();
}
@Override
public void onLoadMore() {
- mPresenter.fetchMore();
+// mPresenter.fetchMore();
}
});
}
@Override
- protected void initViews() {
-
- }
-
- @Override
- protected void bindListener() {
-
- }
-
- @Override
- public void showRefresh() {
+ public void showProgress() {
mSwipeRefreshLayout.setRefreshing(true);
}
@Override
- public void hideRefresh() {
+ public void hideProgress() {
mSwipeRefreshLayout.setRefreshing(false);
}
@@ -130,16 +123,6 @@ public void showError() {
}
- @Override
- public void showLoading() {
-
- }
-
- @Override
- public void showRefreshError(String errorStr) {
-
- }
-
@Override
public void refillData(List list) {
mAdapter.updateItem(list);
@@ -164,7 +147,6 @@ public void onClick(int position, Object object) {
mActivity.overridePendingTransition(0, 0);
}
- @Override
protected void callBackRefreshUi() {
RecyclerViewColor recyclerViewColor = new RecyclerViewColor(mRecyclerView);
recyclerViewColor.setItemBackgroundColor(R.id.technology_rl_body, R.attr.lyItemSelectBackground);
@@ -176,4 +158,9 @@ protected void callBackRefreshUi() {
themeColor.recyclerViewColor(recyclerViewColor);
themeColor.start();
}
+
+ @Override
+ public void shortToast(String string) {
+
+ }
}
diff --git a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyPresenter.java b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyPresenter.java
index ee4c0bfd..1b0c6e4b 100644
--- a/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyPresenter.java
+++ b/app/src/main/java/com/gank/gankly/ui/discovered/technology/TechnologyPresenter.java
@@ -1,7 +1,9 @@
package com.gank.gankly.ui.discovered.technology;
+import android.content.Context;
+import android.ly.jsoup.JsoupServer;
+
import com.gank.gankly.bean.JianDanBean;
-import com.gank.gankly.mvp.FetchPresenter;
import com.gank.gankly.mvp.source.remote.TechnologyDataSource;
import com.socks.library.KLog;
@@ -16,56 +18,57 @@
/**
* Create by LingYan on 2016-11-23
- * Email:137387869@qq.com
*/
-public class TechnologyPresenter extends FetchPresenter implements TechnologyContract.Presenter {
+public class TechnologyPresenter extends TechnologyContract.Presenter {
private TechnologyDataSource mTask;
private TechnologyContract.View mView;
- public TechnologyPresenter(TechnologyDataSource task, TechnologyContract.View view) {
- mTask = task;
- mView = view;
+ public TechnologyPresenter(Context context, TechnologyContract.View view) {
+ super(context, view);
}
- @Override
- public void fetchNew() {
- fetchData(getInitPage());
- }
+// @Override
+// public void fetchNew() {
+// fetchData(getInitPage());
+// }
private void fetchData(int page) {
- mTask.fetchData(page).subscribe(new Observer() {
- @Override
- public void onError(Throwable e) {
- mView.hideRefresh();
- KLog.e(e);
- }
+ JsoupServer
+ .rxConnect("")
+ .build()
+ .subscribe(new Observer() {
+ @Override
+ public void onError(Throwable e) {
+ mView.hideProgress();
+ KLog.e(e);
+ }
- @Override
- public void onComplete() {
- mView.showContent();
- mView.hideRefresh();
- int nextPage = getFetchPage() + 1;
- setFetchPage(nextPage);
- }
+ @Override
+ public void onComplete() {
+ mView.showContent();
+ mView.hideProgress();
+// int nextPage = getFetchPage() + 1;
+// setFetchPage(nextPage);
+ }
- @Override
- public void onSubscribe(Disposable d) {
+ @Override
+ public void onSubscribe(Disposable d) {
- }
+ }
- @Override
- public void onNext(Document document) {
- List