如何在TabLayout中更改选项卡时禁用Snackbar

时间:2018-09-25 07:07:36

标签: android android-fragments android-tablayout android-snackbar

启动应用程序时,如果Snackbar片段中没有Internet连接,我会显示TabLayout。我已向Snackbar添加了Retry操作以检查Internet。如果按下Retry并获得Internet连接,可用Snackbar被关闭,但是如果可以连接互联网并且我切换选项卡,则Snackbar不会被关闭。再一次,我需要按“重试操作”按钮,然后关闭“小吃店”。如何解决此问题?
这是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?

1 个答案:

答案 0 :(得分:1)

这是因为片段是在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 {
    }
  }
   ...
}