2013-08-10 1 views
1

SherlockFragmentActivity를 확장하는 MainActivity와 SherlockFragment를 갖는 두 개의 탭이 있습니다. 이 두 탭에는 AsyncTask로 채워진 ListView가 있습니다. 그것은 모두 잘 작동하지만 탭에서 탭으로 전환 할 때마다 AsyncTask가 다시 트리거되고 한 번만 시작하려고합니다.SherlockFragments로 탭 변경시 AsyncTask가 다시 시작됩니다.

여기 내 MainActivity입니다 :

public class MainActivity extends SherlockFragmentActivity { 

    private FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent); 
     mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"),Tab1.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),Tab2.class, null); 

} 

하고 여기에 TAB1 :

public class Tab1 extends SherlockFragment { 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.tab1, container, false); 
     return v; 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     // TODO Auto-generated method stub 

      new FetchData().execute(); 

    } 

    public class FetchData extends AsyncTask<String, String, String> { 
    ..... 
    } 

} 

TAB2 그냥 선택 다른 MySQL과 유사한 코드가 포함되어 있습니다. 모든 것이 잘 작동하지만 ListView에서 데이터가 채워지지만 Tab1에서 Tab2로 전환 할 때마다 AsyncTask가 다시 트리거됩니다./도와주세요 ...

답변

1

onStart 메서드는 조각이 표시 될 때마다 호출됩니다. 당신이 탭

소스 전환 할 때 : Android fragment life cycle

을 당신이 이동 제안 :

new FetchData().execute(); 

을 onCreateView 방법으로.

+0

나는 그것을 시도했지만, AsyncTask는 트리거하지 않을 것이지만, 그 탭으로 돌아 가면 빈 화면을 제공한다. – Stole51

0

모든 데이터를 다운로드하고 로컬 sqlite에 저장하여 문제를 해결했습니다. 그렇게하면 각 조각에 AsyncTask가 필요하지 않습니다.

건배!

관련 문제