Skip to content

Instantly share code, notes, and snippets.

@ashishdas09
Created March 16, 2018 12:12
Show Gist options
  • Save ashishdas09/fc95dcabdedc8ad3d87c0902050911d1 to your computer and use it in GitHub Desktop.
Save ashishdas09/fc95dcabdedc8ad3d87c0902050911d1 to your computer and use it in GitHub Desktop.
Android - Navigate with new data using signal fragments
private static final String FRAGMENT_TAG = "browseFragment";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navigateToBrowse(0);
}
private void navigateToBrowse(int browseId)
{
BrowseFragment fragment = getBrowseFragment();
if (fragment == null || fragment.getBrowseId() != browseId)
{
fragment = new BrowseFragment();
fragment.setBrowseId(browseId);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(
R.animator.slide_in_from_right, R.animator.slide_out_to_left,
R.animator.slide_in_from_left, R.animator.slide_out_to_right);
transaction.replace(R.id.container, fragment, FRAGMENT_TAG);
// If this is not the top level root, we add it to the fragment back stack,
// so that actionbar toggle and Back will work appropriately:
if (browseId > 0)
{
transaction.addToBackStack(null);
}
transaction.commit();
}
}
public int getCurrentBrowseId()
{
BrowseFragment fragment = getBrowseFragment();
if (fragment == null)
{
return 1;
}
return fragment.getBrowseId();
}
private BrowseFragment getBrowseFragment()
{
return (BrowseFragment) getFragmentManager().findFragmentByTag(FRAGMENT_TAG);
}
@Override
public void onNext()
{
navigateToBrowse(getCurrentBrowseId()+1);
}
public static class BrowseFragment extends Fragment
{
private static final String ARG_BROWSE_ID = "browseId";
private OnListener mListener;
@Override
public void onAttach(Context context)
{
super.onAttach(context);
if (context instanceof BrowseFragment.OnListener)
{
mListener = (BrowseFragment.OnListener) context;
}
else
{
throw new RuntimeException(context.toString()
+ " must implement OnListener");
}
}
@Override
public void onDetach()
{
super.onDetach();
mListener = null;
}
public int getBrowseId()
{
Bundle args = getArguments();
if (args != null)
{
return args.getInt(ARG_BROWSE_ID);
}
return 0;
}
public void setBrowseId(int browseId)
{
Bundle args = new Bundle(1);
args.putInt(ARG_BROWSE_ID, browseId);
setArguments(args);
}
public interface OnListener
{
void onNext();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment