package zone.com.zrefreshlayoutdemo.utils;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import zone.com.zrefreshlayout.ZRefreshLayout;
/**
* [2017] by Zone
*/
public class RecyclerViewEmptyUtils {
private View emptyView;
private RecyclerView rv;
public static void addEmptyView(RecyclerView rv, @NonNull View emptyView) {
RecyclerViewEmptyUtils recyclerViewEmptyUtils = new RecyclerViewEmptyUtils();
recyclerViewEmptyUtils.addEmptyViewInner(rv, emptyView);
}
public static void addEmptyView(RecyclerView rv, @LayoutRes int layoutID) {
RecyclerViewEmptyUtils recyclerViewEmptyUtils = new RecyclerViewEmptyUtils();
recyclerViewEmptyUtils.addEmptyViewInner(rv, View.inflate(rv.getContext(), layoutID, null));
}
private void addEmptyViewInner(final RecyclerView rv, @NonNull final View emptyView) {
RecyclerView.Adapter adapter = rv.getAdapter();
if (adapter == null)
throw new IllegalStateException("oldAdapter 不能为Null!");
this.emptyView = emptyView;
this.rv = rv;
try {
adapter.unregisterAdapterDataObserver(observer);
} catch (Exception e) {
}
if (rv.getParent() instanceof ZRefreshLayout) {
ZRefreshLayout parent = (ZRefreshLayout) rv.getParent();
parent.addView(emptyView, 1);
} else
throw new IllegalStateException("rv parent 类型必须是ZRefreshLayout!");
adapter.registerAdapterDataObserver(observer);
checkIfEmpty();
}
// private void replaceView(RecyclerView rv, @NonNull View emptyView) {
// ViewGroup parent = (ViewGroup) rv.getParent();
// FrameLayout frameLayout = new FrameLayout(rv.getContext());
// frameLayout.setLayoutParams(rv.getLayoutParams());
// int index = parent.indexOfChild(rv);
//
// parent.removeView(rv);
// frameLayout.addView(rv);
// frameLayout.addView(emptyView);
// parent.addView(frameLayout, index);
// }
private RecyclerView.AdapterDataObserver observer = new RecyclerView.AdapterDataObserver() {
public String TAG = "RecyclerViewUtils";
@Override
public void onChanged() {
checkIfEmpty();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
Log.i(TAG, "onItemRangeInserted" + itemCount);
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
checkIfEmpty();
}
};
private void checkIfEmpty() {
boolean emptyViewVisible =
rv.getAdapter().getItemCount() == 0;
emptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}