如何在 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 {
}
}
...
}
当应用程序启动时,如果我的 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 {
}
}
...
}