2013-02-06 8 views
0

현재 3 개의 탭 1,2 및 3이있는 뷰 페이지 색인이 있습니다. 문제는 탭 2로 스 와이프하여 조각 3의 onActivityCreated가 호출되는 것입니다.스 와이프 전에 ViewPagerIndicator - onActivityCreated가 호출되었습니다.

내 탭 3 조각에서 나는 asyntask onActivityCreated를 호출하므로 조각 2가 전환 될 때 asyntask가로드됩니다.

+0

왜 문제인가? ViewPager는 페이지를 볼 수있는 페이지의 왼쪽과 오른쪽으로로드하여 스크롤 할 때 내용을 볼 수 있도록해야합니다. – sgarman

+0

이것이 문제가되는 이유는 프래그먼트 3이 alertdialog 및 asyntask를 호출하여 조각 2로 전환 할 때 문제를 일으킬 수 있기 때문입니다 – ericlee

답변

1

기본적으로 ViewPages는 현재 Fragment의 양쪽에 하나의 Fragment를로드합니다. Fragment가 중앙에 언제 있는지 알기 위해서는 모든 Fragment 서브 클래스에 의해 구현 된 인터페이스와 함께 ViewPager의 onPageChangeListener를 사용할 수 있습니다.

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(); 
    } 
} 
1

최상의 옵션은 조각이 표시되는지 여부를 결정하여 대화 상자를 표시할지 여부를 결정하는 것입니다. How to determine when Fragment becomes visible in ViewPager

이 상호 작용을 다시 설계하는 것이 좋습니다. 뷰 파인더는 뷰 사이를 쉽게 스 와이프하고 대화 상자를 팝업하면 혼란스러운 상호 작용이 될 수 있습니다.