Skip to content

Instantly share code, notes, and snippets.

@rajumark
Forked from joinAero/SightFragment.java
Created November 5, 2019 06:12

Revisions

  1. @joinAero joinAero created this gist Jan 14, 2016.
    90 changes: 90 additions & 0 deletions SightFragment.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,90 @@
    package cc.cubone.turbo.core.app;

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.View;

    /**
    * Fragment for handling view after it has been created and visible to user for the first time.
    *
    * <p>Specially in {@link android.support.v4.view.ViewPager}, the page will be created beforehand
    * but not be visible to user.
    *
    * <p>Call {@link android.support.v4.view.ViewPager#setOffscreenPageLimit(int)} to set the number of
    * pages that should be retained.
    *
    * Reference:
    * <ul>
    * <li><a href="http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager">
    * How to determine when Fragment becomes visible in ViewPager</a>
    * </ul>
    */
    public class SightFragment extends Fragment {

    private boolean mUserSeen = false;
    private boolean mViewCreated = false;

    public SightFragment() {
    }

    /*public boolean isUserSeen() {
    return mUserSeen;
    }
    public boolean isViewCreated() {
    return mViewCreated;
    }*/

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (!mUserSeen && isVisibleToUser) {
    mUserSeen = true;
    onUserFirstSight();
    tryViewCreatedFirstSight();
    }
    onUserVisibleChanged(isVisibleToUser);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
    // Override this if you want to get savedInstanceState.
    mViewCreated = true;
    tryViewCreatedFirstSight();
    }

    @Override
    public void onDestroyView() {
    super.onDestroyView();
    mViewCreated = false;
    mUserSeen = false;
    }

    private void tryViewCreatedFirstSight() {
    if (mUserSeen && mViewCreated) {
    onViewCreatedFirstSight(getView());
    }
    }

    /**
    * Called when the new created view is visible to user for the first time.
    */
    protected void onViewCreatedFirstSight(View view) {
    // handling here
    }

    /**
    * Called when the fragment's UI is visible to user for the first time.
    *
    * <p>However, the view may not be created currently if in {@link android.support.v4.view.ViewPager}.
    */
    protected void onUserFirstSight() {
    }

    /**
    * Called when the visible state to user has been changed.
    */
    protected void onUserVisibleChanged(boolean visible) {
    }

    }