現在、3つのタブ1、2、および3を備えたviewpageindicatorがあります。問題は、タブ2にスワイプすると、フラグメント3からのonActivityCreatedが呼び出されることです。
タブ3フラグメントで、asyntask onActivityCreatedを呼び出します。したがって、フラグメント2が切り替えられると、asyntaskがロードされます。
現在、3つのタブ1、2、および3を備えたviewpageindicatorがあります。問題は、タブ2にスワイプすると、フラグメント3からのonActivityCreatedが呼び出されることです。
タブ3フラグメントで、asyntask onActivityCreatedを呼び出します。したがって、フラグメント2が切り替えられると、asyntaskがロードされます。
フラグメントが表示されているかどうかを判断し、ダイアログボックスを表示するかどうかを判断するのが最善の方法だと思います。ここでそれを行う方法のアイデアを得ることができます:フラグメントがViewPagerにいつ表示されるかを決定する方法
このインタラクションの再設計を検討する必要がある可能性があります。ビューページャーはビュー間を簡単にスワイプするように設計されており、ダイアログボックスをポップアップすると混乱するインタラクションになる可能性があります。
デフォルトでは、ViewPagersは現在のフラグメントのいずれかの側に1つのフラグメントをロードします。フラグメントが中央にあることを知るには、ViewPagerのonPageChangeListenerを、すべてのFragmentサブクラスによって実装されたインターフェースと組み合わせて使用できます。
public interface FragmentChangeListener
{
void onCentered();
}
このインターフェースをすべてのフラグメントに実装する
public class CustomFragment extends Fragment implements FragmentChangeListener
{
....
@Override
public void onCentered()
{
//Show alertDialog and start asyncTask
}
}
アクティビティクラス:
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();
}
}