我目前有一个带有三个选项卡 1,2 和 3 的 viewpageindicator。问题是当我滑动到选项卡 2 时,正在调用来自片段 3 的 onActivityCreated。
在我的标签 3 片段中,我将调用一个 asyntask onActivityCreated ,因此在切换片段 2 时,它将加载一个 asyntask。
我目前有一个带有三个选项卡 1,2 和 3 的 viewpageindicator。问题是当我滑动到选项卡 2 时,正在调用来自片段 3 的 onActivityCreated。
在我的标签 3 片段中,我将调用一个 asyntask onActivityCreated ,因此在切换片段 2 时,它将加载一个 asyntask。
By default, ViewPagers load one Fragment on either side of the current Fragment. To know when a Fragment is in the centre, you could use the onPageChangeListener of the ViewPager in combination with an interface implemented by every Fragment subclass.
public interface FragmentChangeListener
{
void onCentered();
}
Implement this interface in every Fragment
public class CustomFragment extends Fragment implements FragmentChangeListener
{
....
@Override
public void onCentered()
{
//Show alertDialog and start asyncTask
}
}
In your Activity class:
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(int position)
{
FragmentChangeListener listener = (FragmentChangeListener) //cast fragment at this position to FragmentChangeListener
listener.onCentered();
}
}
我认为您最好的选择是确定片段是否可见,以决定是否应该显示对话框。您可以在此处了解如何执行此操作:如何确定 Fragment 何时在 ViewPager 中可见
您可能应该考虑重新设计此交互,viewpager 旨在轻松地在视图之间滑动,弹出对话框可能会被证明是一种令人困惑的交互。