How to hide FAB on a particular fragment

坚强是说给别人听的谎言 提交于 2019-12-14 03:48:24

问题


Well I want to remove/hide FAB only on a particular fragment , HISTORY tab in my case .

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        .... (Overriding methods , I didnt do anything here
        });

My methods for inflating View Pager

private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new HistoryFragment(), "HISTORY");
        adapter.addFragment(new TransactionFragment(), "CURRENT");
        adapter.addFragment(new FutureFragment(), "FUTURE");

        viewPager.setAdapter(adapter);

    }

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);

    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(android.support.v4.app.Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

Where and how should I make changes to my code to Hide my FAB from the HISTORY tab/fragment and show again on other Tabs


回答1:


I'd think it's as simple as this:

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            if(position == 0) {
               // hide FAB
            } else {
               // show FAB
            }
        }
}

You can do a lot of cleanup to improve maintenance like assign page numbers to each page like:

private static final int PAGE_HISTORY = 0;
private static final int PAGE_TRANSACTION = 1;
private static final int PAGE_FUTURE = 2;

So instead of if(position == 0) you say if(position == PAGE_HISTORY). That way you don't have to change a lot of code if you ever change your pages around.




回答2:


You can try setting the OnTabSelectedListener to your TabLayout.

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {

        yourFAB.setVisibilty(View.GONE);

        // or

       yourFAB.setVisibilty(View.VISIBLE);

    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
});



回答3:


Just add this you your OnPageChangeListener:

@Override
public void onPageSelected(int position) {
    if (adapter.getItem(position) instanceof HistoryFragment) fab.hide();
    //else fab.show();
}    


来源:https://stackoverflow.com/questions/40156179/how-to-hide-fab-on-a-particular-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!