【问题标题】:How to Disable Snackbar on Tab change in TabLayout如何在 TabLayout 中的选项卡更改上禁用 Snackbar
【发布时间】:2019-02-28 17:46:24
【问题描述】:

当应用程序启动时,如果 Internet 连接在我的 TabLayout Fragments 中不可用,我将显示 Snackbar。我已向 Snackbar 添加了重试操作以检查 Internet。如果按下重试并且 Internet 连接可用 Snackbar 被关闭但如果互联网连接可用并且我切换标签,则不会关闭 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?

【问题讨论】:

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


    【解决方案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 {
        }
      }
       ...
    }
    

    【讨论】:

    • 我已输入代码@Override public void setMenuVisibility(boolean menuVisible) { super.setMenuVisibility(menuVisible); if (menuVisible) { if(snackbar!=null && snackbar.isShown()){ snackbar.dismiss(); } Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { checkInternet(); } }, 1000); } },但无法正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多