ViewPager
を使用して、jsoupでWebサイトから取得したコンテンツを表示しています。 各ページのonCreateView
には、AsyncTask
が呼び出され、データが取得され、ページごとにView
が更新されます。ViewPagerを素早くスライドさせたときのAsyncTaskの実行を避ける
ユーザーがページを通常より速くスライドさせると、AsyncTask
が何度か呼び出され、結果的に有用でないものが最後であるため、jsoupでいくつかの無駄な要求が行われるという問題があります。
Fragment
クラスに
setUserVisibleHint
を使用して
Activity
クラスで
setOnPageChangeListener
を追加しようとしたが、これらの方法は、私は次のページをプリロードの
ViewPager
行動を失わせるし、私はそれを望んでいません。
ユーザーがスライドを停止したことを知り、その時点でAsynTask
に電話する方法はありますか?
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;
}
}
ダミーhandler.postdelay(...、delay_ms)またはカウントダウンタイマーを使用しています。 1秒の遅延がうまくいくはずです。フラグメント数が少ない場合は、viewpager.setoffscreenpagelimit(fragments_count)を設定して、一度読み込まれ、毎回変更されたページで初期化されないようにすることができます。 – uguboz