如何在 TabLayout 中的 Tab 更改时禁用 Snackbar

How to Disable Snackbar on Tab change in TabLayout

当应用程序启动时,如果我的 TabLayout 中没有互联网连接,我会显示 Snackbar Fragments.I 已将重试操作添加到 Snackbar 以检查 Internet.If 重试按下并且互联网连接可用 Snackbar 被关闭但是如果互联网连接可用并且我切换选项卡 Snackbar 不会被关闭。我需要再次按下 Retry Action 按钮,然后 Snackbar 是 dismiss.How 来解决这个问题?
这是 checkInternet

的代码
public void checkInternet(){
       String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
       if (NetworkStatus.equals("false")) {
          snackbar=Snackbar.make(recyclerView,"You are Offline.",
                  Snackbar.LENGTH_INDEFINITE).setAction("Retry", new View.OnClickListener() {
              @Override
              public void onClick(View v) {
             checkInternet();
              }
          });
          snackbar.show();
       }else{
           getData();
       }

   }  

这是显示我的 TabLayout 片段的代码

public class ChooseTab extends Fragment  {

    // Tab Layout and ViewPager
    TabLayout tabLayout;
    ViewPager viewPager;
    public ChooseTab() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.choose_tab, container, false);
        int position=getArguments().getInt("TARGET_FRAGMENT_ID");
        tabLayout = (TabLayout) v.findViewById(R.id.simpleTabLayout);
        tabLayout.addTab(tabLayout.newTab().setText("QUEUE"));
        tabLayout.addTab(tabLayout.newTab().setText("TABLES"));
        tabLayout.addTab(tabLayout.newTab().setText("Reservation"));
        viewPager = (ViewPager) v.findViewById(R.id.simpleViewPager);
        viewPager.setOffscreenPageLimit(3);
        final PagerAdapter adapter = new PagerAdapter(getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        viewPager.setCurrentItem(position);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
                adapter.notifyDataSetChanged();
            }
        });
        return v;
    }
}  

如果更改了 Tab 并且 Internet 已经可用,如何禁用 Snackbar?

这是因为片段是在 ViewPager 完成其设置时调用的,即从其适配器添加片段并显示片段。

因此,如果只有片段可见,则需要显示 Snackbar,反之亦然。

如果您使用片段支持库,则可以使用 getUserVisibleHint() 或重写 setUserVisibleHint() 来检查片段可见性。

您可以执行以下操作:

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