Как отключить Snackbar на вкладке изменения в TabLayout - PullRequest
0 голосов
/ 25 сентября 2018

Когда приложение запущено, я показываю Snackbar, если в моих TabLayout Фрагментах нет подключения к Интернету. Я добавил действие «Повторить» в 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;
    }
}  

Как отключить Snackbar, если вкладка изменена, а Интернет уже доступен?

1 Ответ

0 голосов
/ 25 сентября 2018

Это потому, что фрагмент вызывается, когда 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 {
    }
  }
   ...
}
...