3

pageradapter から (asyctask に) 位置を取得しています。

instantiateItem(View collection, int pos) { .execute(pos);}

しかし、前のページにスワイプすると、間違った位置が保持されます。正しい前の位置を取得するにはどうすればよいですか?

ViewPager getCurrentItem() を使用して現在のページのインデックスを取得できるかもしれませんが、コードでそれを使用するにはどうすればよいですか?

public class QuestionPagerAdapter extends PagerAdapter{

    public QuestionPagerAdapter(){
        super();

    }
    @Override
    public int getCount() {
        int qcount = QuestionPagerAdapter.q.getQuestionCount();
        return qcount;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((View) object);
    }

    @Override
    public Object instantiateItem(View collection, int pos) {
        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View page = inflater.inflate(R.layout.page_quiz, null);

        TextView tv = (TextView)page.findViewById(R.id.questionText);

        QuizFetchTask fft = new QuizFetchTask(tv);
        fft.execute(pos);

            ((ViewPager) collection).addView(page, 0);
        return page;
    }


    @Override
    public void destroyItem(View collection, int position, Object view) {
        //Util.Log("destroying" + position);
        ((ViewPager) collection).removeView((View) view);
    }

}
4

2 に答える 2

9

おそらくあなたが探しているのはViewPager.setOnPageChangeListener

次のようなことができます:

myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i2) {

            }

            @Override
            public void onPageSelected(int i) {
               fft.execute(i)
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });

また、ページが選択されたときに実行しようとしているタスクのタイプがわかりませんが、最初に前のタスクをキャンセルすることは理にかなっています..例:

                @Override
                public void onPageSelected(int i) {
                   fft.cancel(true);
                   fft.execute(i)
                }

したがって、多数の同時タスクを生成するだけではありません...

于 2013-04-16T02:27:33.773 に答える
3

このメソッドは ViewPager に追加されます。したがって、以下のように使用できます。

ViewPager viewPager = new ViewPager(...);

...... // set viewpager adapter


obj = viewPagerAdapter.getItem(viewPager.getCurrentItem());
于 2015-01-27T03:50:22.710 に答える