如何解决android选项卡布局切换问题
我正在开发一个android应用程序,它有四个带有tablayout的片段,每个片段都有一个连接错误对话框如何解决android选项卡布局切换问题,android,Android,我正在开发一个android应用程序,它有四个带有tablayout的片段,每个片段都有一个连接错误对话框 第一个问题是,当我启动我的应用程序时,有四个片段可以工作 同时在同一时间。所以,当我发生连接错误四 当我切换到第二个选项卡时,对话框显示在第一个片段中 它不显示他的对话框,因为他的对话框显示在第一个对话框中 碎片 第二个问题是,我使用滑动刷新布局创建片段 我在onCreate方法中调用onRefresh方法。 当我启动应用程序时,第一个片段数据从服务器加载,但 当我将第一个选项卡切换到第
- 第一个问题是,当我启动我的应用程序时,有四个片段可以工作 同时在同一时间。所以,当我发生连接错误四 当我切换到第二个选项卡时,对话框显示在第一个片段中 它不显示他的对话框,因为他的对话框显示在第一个对话框中 碎片
- 第二个问题是,我使用滑动刷新布局创建片段 我在onCreate方法中调用onRefresh方法。 当我启动应用程序时,第一个片段数据从服务器加载,但 当我将第一个选项卡切换到第二个选项卡时,不会从中加载他的数据 但当我将第一个选项卡切换到第三个选项卡时,这就是工作。 另外,当我将第二个选项卡切换到第三个选项卡时,它不会从中加载数据 但当我将第二个选项卡切换到第四个选项卡时,它就正常工作了。它是 仅在切换选项卡时工作,其中一个选项卡不同。有什么好办法吗 解决这些问题
在每个片段中重写setUserVisibleHint,并用if(isVisibleToUser)而不是Oncreate编写对话框代码。这应该能解决你的问题
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
//dialog box code here
}
}
第一个问题:您需要检查Onresume()方法而不是oncreate()中的连接错误。请访问此链接以解决您的问题,但我的对话框是在另一个类中创建的。我如何调用它。我作为应答者共享在FragmentActivity中编写此方法。公共片段getFragment(int位置){Fragment Fragment=(Fragment)viewPager.getAdapter().instanceItem(viewPager,position);if(NoticeBoardFragment的片段实例){NoticeBoardFragment对象=(NoticeBoardFragment)Fragment;return object;}else if(EventsFragment的片段实例){EventsFragment object=(EventsFragment)fragment;return object;。将唯一的int FRAGMENTAG与网络调用一起传递,并从每个片段调用Dailogalert
class MyAdapter extends FragmentStatePagerAdapter {
int num_of_tab;
public MyAdapter(FragmentManager fm, int num_of_tab) {
super(fm);
this.num_of_tab = num_of_tab;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
NoticeBoardFragment noticeBoardFragment = new NoticeBoardFragment();
return noticeBoardFragment;
case 1:
NewsFragment newsFragment = new NewsFragment();
return newsFragment;
case 2:
EventsFragment eventsFragment = new EventsFragment();
return eventsFragment;
case 3:
ResultFragment resultFragment = new ResultFragment();
return resultFragment;
default:
return null;
}
}
@Override
public int getCount() {
return num_of_tab;
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
//dialog box code here
}
}