Last active
January 6, 2016 17:05
-
-
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()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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