如何在特定片段上隐藏 FAB
How to hide FAB on a particular fragment
好吧,我想 remove/hide 仅在特定片段上进行 FAB,在我的例子中是“历史”选项卡。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
.... (Overriding methods , I didnt do anything here
});
我给 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);
}
}
我应该在哪里以及如何更改我的代码以从历史记录中隐藏我的 FAB tab/fragment 并再次显示在其他选项卡上
您可以尝试将 OnTabSelectedListener 设置为您的 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) {
}
});
我认为就这么简单:
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == 0) {
// hide FAB
} else {
// show FAB
}
}
}
您可以做很多清理工作来改进维护,例如为每个页面分配页码,例如:
private static final int PAGE_HISTORY = 0;
private static final int PAGE_TRANSACTION = 1;
private static final int PAGE_FUTURE = 2;
所以你说 if(position == PAGE_HISTORY)
而不是 if(position == 0)
。这样,如果您更改页面,就不必更改大量代码。
只需将此添加到您的 OnPageChangeListener:
@Override
public void onPageSelected(int position) {
if (adapter.getItem(position) instanceof HistoryFragment) fab.hide();
//else fab.show();
}
好吧,我想 remove/hide 仅在特定片段上进行 FAB,在我的例子中是“历史”选项卡。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
.... (Overriding methods , I didnt do anything here
});
我给 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);
}
}
我应该在哪里以及如何更改我的代码以从历史记录中隐藏我的 FAB tab/fragment 并再次显示在其他选项卡上
您可以尝试将 OnTabSelectedListener 设置为您的 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) {
}
});
我认为就这么简单:
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == 0) {
// hide FAB
} else {
// show FAB
}
}
}
您可以做很多清理工作来改进维护,例如为每个页面分配页码,例如:
private static final int PAGE_HISTORY = 0;
private static final int PAGE_TRANSACTION = 1;
private static final int PAGE_FUTURE = 2;
所以你说 if(position == PAGE_HISTORY)
而不是 if(position == 0)
。这样,如果您更改页面,就不必更改大量代码。
只需将此添加到您的 OnPageChangeListener:
@Override
public void onPageSelected(int position) {
if (adapter.getItem(position) instanceof HistoryFragment) fab.hide();
//else fab.show();
}