Ich benutze eine ViewPager
um Inhalte anzuzeigen, die von einer Website mit jsoup geholt wurden. In der onCreateView
jeder Seite rufe ich eine AsyncTask
, die die Daten abruft und aktualisiert die View
für jede Seite.Vermeiden Sie die Ausführung von AsyncTask, wenn der ViewPager schnell verschoben wird
Das Problem ist, dass, wenn der Benutzer die Seiten schneller als üblich gleitet die AsyncTask
mehrere Male aufgerufen wird und folglich mehrere unbrauchbare Anforderungen mit jsoup gemacht werden, da das einzige nützliche ist das letzte.
Ich versuchte setUserVisibleHint
auf der Fragment
Klasse und das Hinzufügen von setOnPageChangeListener
in der Activity
-Klasse, aber diese Methoden machen mir das ViewPager
Verhalten der Vorbelastung auf die nächste Seite verlieren, und ich will nicht, dass.
Gibt es eine Möglichkeit zu wissen, wann der Benutzer nicht mehr rutschte und nur die AsynTask
in diesem Moment anruft?
public class ScreenSlidePageFragment extends Fragment {
public static final String PAGE_NUMBER = "page";
private int mProblemNumber;
public static ScreenSlidePageFragment create(int pageNumber) {
ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
Bundle args = new Bundle();
args.putInt(PAGE_NUMBER, pageNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(PAGE_NUMBER);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragment_screen_slide_page, container, false);
new GetPageTask(url).execute();
return rootView;
}
}
Verwendung ein Dummy handler.postdelay (..., delay_ms) oder Countdown-Timer. 1sek Verzögerung sollte gut funktionieren. Wenn Sie nur ein paar Fragmente haben, können Sie viewpager.setoffscreenpacelimit (fragments_count) so einstellen, dass es einmal geladen wird und niemals auf der geänderten Seite initialisiert wird. – uguboz