启动应用程序时,如果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?
答案 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 {
}
}
...
}