Skip to content

Instantly share code, notes, and snippets.

@robUx4
Last active January 6, 2016 17:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robUx4/078a05d86502b296219d to your computer and use it in GitHub Desktop.
Save robUx4/078a05d86502b296219d to your computer and use it in GitHub Desktop.
Basic SwipeRefreshLayout support in ListFragment, you get support for an empty view in ListFragment. You need to set an OnRefreshListener and call setRefreshing()
import org.gawst.proxy.ui.SwipeListFragment;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.widget.ListView;
/**
* A Fragment that loads data from a CursorAdapter in a ListView, with swipe refresh support
*/
public abstract class FragmentCursor extends SwipeListFragment implements LoaderCallbacks<Cursor>, CursorListener {
public abstract String getTitle(Context context);
protected abstract CursorAdapter createAdapter();
protected abstract void onCursorClick(Cursor cursor);
private CursorAdapter mAdapter;
@Override
public final void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
onCursorChanged();
}
});
setListShown(false);
setEmptyText(getString(R.string.no_query_yet));
mAdapter = createAdapter();
setListAdapter(mAdapter);
setListShown(true);
getLoaderManager().initLoader(0, null, this);
}
@Override
public final void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
mAdapter.getCursor().moveToPosition(position);
onCursorClick(mAdapter.getCursor());
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
getSwipeRefreshLayout().setRefreshing(false);
// The list should now be shown.
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
@Override
public void onCursorChanged() {
getLoaderManager().restartLoader(0, null, this);
}
}
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by robUx4 on 12/29/2014.
*/
public class SwipeListFragment extends ListFragment implements SwipeRefreshLayout.OnRefreshListener {
private SwipeRefreshLayout.OnRefreshListener mRefreshListener;
private ContainerSwipeRefreshLayout refreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup listContainer = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
refreshLayout = new ContainerSwipeRefreshLayout(inflater.getContext());
refreshLayout.addView(listContainer);
refreshLayout.setOnRefreshListener(this);
return refreshLayout;
}
public void setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener refreshListener) {
this.mRefreshListener = refreshListener;
}
@Override
public final void onRefresh() {
if (null != mRefreshListener) {
mRefreshListener.onRefresh();
}
}
@Override
public void setListShown(boolean shown) {
super.setListShown(shown);
refreshLayout.setEnabled(shown);
}
public SwipeRefreshLayout getSwipeRefreshLayout() {
return refreshLayout;
}
private class ContainerSwipeRefreshLayout extends SwipeRefreshLayout {
public ContainerSwipeRefreshLayout(Context context) {
super(context);
}
public ContainerSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean canChildScrollUp() {
return ViewCompat.canScrollVertically(getListView(), -1);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment