package tellh.com.gitclub.presentation.view.fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.tellh.nolistadapter.adapter.RecyclerViewAdapter;
import tellh.com.gitclub.R;
import tellh.com.gitclub.presentation.view.adapter.viewbinder.ErrorViewBinder;
import tellh.com.gitclub.presentation.view.fragment.search.ListLoadingListener;
public abstract class ListFragment extends Fragment
implements SwipeRefreshLayout.OnRefreshListener, ListLoadingListener, ErrorViewBinder.OnReLoadCallback {
protected SwipeRefreshLayout refreshLayout;
private RecyclerViewAdapter listAdapter;
@Override
public void showLoading() {
if (refreshLayout.isRefreshing())
return;
refreshLayout.setRefreshing(true);
}
@Override
public void hideLoading() {
if (!refreshLayout.isRefreshing())
return;
refreshLayout.setRefreshing(false);
}
protected RecyclerView recyclerView;
protected Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(getLayoutId(), container, false);
// Set the adapter
context = view.getContext();
recyclerView = (RecyclerView) view.findViewById(R.id.list);
refreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refreshLayout);
recyclerView.setLayoutManager(getLayoutManager());
listAdapter = (RecyclerViewAdapter) getListAdapter();
recyclerView.setAdapter(listAdapter);
refreshLayout.setOnRefreshListener(this);
refreshLayout.setProgressViewOffset(false, -100, 80);
refreshLayout.setColorSchemeResources(R.color.blue, R.color.brown, R.color.purple, R.color.green);
return view;
}
@NonNull
protected RecyclerView.LayoutManager getLayoutManager() {
return new LinearLayoutManager(context);
}
@Override
public void showErrorView() {
listAdapter.showErrorView(recyclerView);
}
protected abstract RecyclerView.Adapter getListAdapter();
protected abstract int getLayoutId();
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void reload() {
hideLoading();
onRefresh();
}
@Override
public void onRefresh() {
listAdapter.hideErrorView(recyclerView);
}
}