2016-04-18 7 views
1

Ich verwende ViewPager, um ein Layout mit Tabs zu erstellen, und in jedem Tab verwende ich ein Fragment. Eine davon ist, alle Kontakte von de user zu bekommen und sie auf eine ListView zu setzen. Aber ich möchte de AssyncTask nur aufrufen, wenn das Fragment auf dem Bildschirm angezeigt wird.Wie ruft man eine Methode in onCreateView nur auf, wenn das Fragment im Bildschirm angezeigt wird?

Gibt es eine Methode, um es zu tun? TY

+0

Konnten Sie die AsyncTask stattdessen zu onResume() verschieben? –

+0

Überprüfen Sie die Sichtbarkeit Ihres Fragments http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager –

Antwort

1

Sie

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) 
{ 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) 
    { 
     //things to do when fragment is visible 
    } 
} 

Schon vor onCreateView es sichtbar ist aufgerufen wird verwenden können.

+0

Danke, es hat funktioniert –

2

Starten Sie Ihre AsyncTask in onStart. Dies ist die aufgerufene Methode, sobald das Fragment für den Benutzer sichtbar wird. onCreateView wird aufgerufen, auch wenn das Fragment nicht sichtbar wird. Siehe auch: http://developer.android.com/reference/android/app/Fragment.html#onStart()

Ich würde jedoch empfehlen, einen Lader statt AsyncTask (beispielsweise ein AsyncTaskLoader http://developer.android.com/reference/android/content/AsyncTaskLoader.html) zu verwenden.

0

können Sie überprüfen, um zu sehen, ob es mit .isVisible() so etwas wie dieses

MyFragmentClass fragment = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("fragmentTAG"); 

if (fragment != null && fragment.isVisible()) { 
    // call AsyncTask 
} 
Verwandte Themen