Lord Goderick
Lord Goderick

Reputation: 985

How To Hide View on Specific Fragment

I want to hide a GridView by setting drawerGrid.setVisibility(View.GONE); when the ViewPager is on a specific layout. Do I need to implement a onPageListener or is there an easier option?

Launcher.java

public class Launcher extends FragmentActivity {

    DrawerAdapter drawerAdapterObject;
    GridView drawerGrid;
    class Package {
        Drawable icon;
        String name;
        String label;
    }
    Package[] packs;
    PackageManager pm;
    ViewPager viewpager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_launcher);


        drawerGrid = (GridView) findViewById(R.id.content);
        pm=getPackageManager();
        set_packs();
        drawerAdapterObject = new DrawerAdapter(this, packs);
        drawerGrid.setAdapter(drawerAdapterObject);

        viewpager = (ViewPager) findViewById(R.id.pager);
        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
        viewpager.setAdapter(adapter);
        viewpager.setCurrentItem(1);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window w = getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }

    }

    public void set_packs() {
        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> packsList = pm.queryIntentActivities(mainIntent, 0);
        packs = new Package[packsList.size()];
        for(int I=0;I<packsList.size();I++){
            packs[I]=  new Package();
            packs[I].icon=packsList.get(I).loadIcon(pm);
            packs[I].name=packsList.get(I).activityInfo.packageName;
            packs[I].label=packsList.get(I).loadLabel(pm).toString();
        }

    }

PagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {
            case 0:

                return new Fragment1();

            case 1:

                return new Fragment2();

            default:
                break;
        }
        return null;
    }

    @Override
    public int getCount() {
        return 2;
    }

}

Fragment1.java

public class Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        return inflater.inflate(R.layout.activity_apps,container,false);
    }

}

Fragment2.java

public class Fragment2 extends Fragment {

        ViewPager viewpager;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            return inflater.inflate(R.layout.activity_homescreen,container,false);
        }
    }

Upvotes: 2

Views: 695

Answers (2)

N J
N J

Reputation: 27505

You can do that in two ways:

  1. As you mentioned by using addOnPageChangedListener
  2. Using callback when your fragment become visible to user

Upvotes: 1

rafsanahmad007
rafsanahmad007

Reputation: 23881

How to determine when Fragment becomes visible in ViewPager:

try this;

  public class MyFragment extends Fragment {
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
          //hide view here
        }
        else {
        }
    }
}

setUserVisibleHint

Set a hint to the system about whether this fragment's UI is currently visible to the user. This hint defaults to true and is persistent across fragment instance state save and restore.

here isVisibleToUser boolean: returns true if this fragment's UI is currently visible to the user (default), false if it is not.

Upvotes: 1

Related Questions