package com.lin.poweradapter.example; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewStub; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.lin.poweradapter.SingleAdapter; import com.lin.poweradapter.SpaceItemDecoration; import com.lin.poweradapter.example.util.Utils; import butterknife.BindView; /** * Created by lin18 on 2017/4/28. */ public abstract class RecyclerViewActivity<E, B extends SingleAdapter> extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener, SingleAdapter.OnItemClickListener, SingleAdapter.OnItemLongClickListener { @BindView(R.id.recyclerView) protected RecyclerView recyclerView; @Nullable @BindView(R.id.swiprefresh) protected SwipeRefreshLayout swiprefresh; @Nullable protected ViewStub errorView; @Nullable protected TextView textError; @Nullable protected ViewStub emptyView; @Nullable protected ImageView icon; @Nullable protected TextView empty; @Nullable protected ViewStub progressView; @NonNull protected B adapter; @Override public int getLayoutResource() { return R.layout.activity_recyclerview; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } protected void configure() { configure(new SpaceItemDecoration(this, R.drawable.divider)); } protected void configure(RecyclerView.ItemDecoration decor) { configure(new LinearLayoutManager(this), decor); } protected void configure(RecyclerView.LayoutManager layout) { configure(layout, new SpaceItemDecoration(this, R.drawable.divider)); } protected void configure(RecyclerView.LayoutManager layout, RecyclerView.ItemDecoration decor) { setOnRefreshListener(); initRecyclerView(layout, decor); adapter = createAdapter(); recyclerView.setAdapter(adapter); } @NonNull protected abstract B createAdapter(); protected void initRecyclerView() { initRecyclerView(new SpaceItemDecoration(this, R.drawable.divider)); } protected void initRecyclerView(RecyclerView.ItemDecoration decor) { initRecyclerView(new LinearLayoutManager(this), decor); } protected void initRecyclerView(RecyclerView.LayoutManager layout, RecyclerView.ItemDecoration decor) { recyclerView.setLayoutManager(layout); recyclerView.setHasFixedSize(true); recyclerView.setNestedScrollingEnabled(false); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.addItemDecoration(decor); } protected void setOnRefreshListener() { if (swiprefresh != null) swiprefresh.setOnRefreshListener(this); } protected void loadData() { setRefreshing(false); } protected void setRefreshing(boolean refreshing) { if (swiprefresh != null) swiprefresh.setRefreshing(refreshing); } @Override public void onRefresh() { loadData(); } @Override public void onItemClick(View v, int position) { } @Override public boolean onItemLongClick(View v, int position) { return false; } protected void refreshWithSwipe() { adapter.clear(); setRefreshing(true); onRefresh(); } protected void refreshWithProgress() { adapter.clear(); if (progressView == null) { progressView = (ViewStub) findViewById(R.id.progress_view); progressView.inflate(); } showWithFadeIn(progressView).hide(recyclerView); onRefresh(); } protected RecyclerViewActivity<E, B> showRecyclerView() { showWithFadeIn(recyclerView).hide(emptyView).hide(emptyView); return this; } protected RecyclerViewActivity<E, B> showEmpty() { return showEmpty(null, null); } protected RecyclerViewActivity<E, B> showEmpty(@StringRes int resid) { return showEmpty(null, getString(resid)); } protected RecyclerViewActivity<E, B> showEmpty(@Nullable Drawable drawable, CharSequence text) { if (emptyView == null) { emptyView = (ViewStub) findViewById(R.id.empty_view); emptyView.inflate(); } if (icon == null) icon = (ImageView) emptyView.findViewById(android.R.id.icon); icon.setImageDrawable(drawable); if (empty == null) empty = (TextView) emptyView.findViewById(android.R.id.empty); empty.setText(text); showWithFadeIn(emptyView).hide(recyclerView); return this; } protected RecyclerViewActivity<E, B> showError() { return showError(getString(R.string.text_error)); } protected RecyclerViewActivity<E, B> showError(CharSequence text) { if (errorView == null) { errorView = (ViewStub) findViewById(R.id.error_view); errorView.inflate(); } if (textError == null) textError = (TextView) errorView.findViewById(R.id.text_error); textError.setText(text); showWithFadeIn(errorView).hide(recyclerView); return this; } protected RecyclerViewActivity<E, B> showWithFadeIn(final View view) { if (view != null) { show(fadeIn(view)); } return this; } protected RecyclerViewActivity<E, B> show(final View view) { if (view != null) view.setVisibility(View.VISIBLE); return this; } protected RecyclerViewActivity<E, B> hide(final View view) { if (view != null) view.setVisibility(View.GONE); return this; } public View fadeIn(@NonNull View view) { return Utils.fadeIn(this, view); } protected void showToast(CharSequence text) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } }