Android ViewPagerAdapter返回错误的位置

Android ViewPagerAdapter返回错误的位置,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我正在开发一个使用ViewPager的应用程序 在ViewPager下面,有一些要点应该指示显示的是哪个页面,但它们的行为是错误的 以下是活动部分: ind1 = (ImageView)findViewById(R.id.page1); ind2 = (ImageView)findViewById(R.id.page2); ind3 = (ImageView)findViewById(R.id.page3); ind4 = (Ima

我正在开发一个使用ViewPager的应用程序

在ViewPager下面,有一些要点应该指示显示的是哪个页面,但它们的行为是错误的

以下是活动部分:

        ind1 = (ImageView)findViewById(R.id.page1);
        ind2 = (ImageView)findViewById(R.id.page2);
        ind3 = (ImageView)findViewById(R.id.page3);
        ind4 = (ImageView)findViewById(R.id.page4);

        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
下面是适配器:

/*Adapter for ViewPager*/
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter{

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                ind1.setImageResource(on);
                ind2.setImageResource(off);
                ind3.setImageResource(off);
                ind4.setImageResource(off);
                return Frag1.newInstance();
            case 1: 
                ind1.setImageResource(off);
                ind2.setImageResource(on);
                ind3.setImageResource(off);
                ind4.setImageResource(off);
                return Frag2.newInstance();
            case 2: 
                ind1.setImageResource(off);
                ind2.setImageResource(off);
                ind3.setImageResource(on);
                ind4.setImageResource(off);
                return Frag3.newInstance();
            case 3: 
                ind1.setImageResource(off);
                ind2.setImageResource(off);
                ind3.setImageResource(off);
                ind4.setImageResource(on);
                return Frag4.newInstance();
            default:
                ind1.setImageResource(on);
                ind2.setImageResource(off);
                ind3.setImageResource(off);
                ind4.setImageResource(off);
                return Frag1.newInstance();
        }
    }

    @Override
    public int getCount() {
        return NUM_PAGES;  /*NUM_PAGES = 4*/
    }
}
这是Frag1其他片段与Frag1相同,唯一的区别是布局和加载的HTML文件:

public class Frag1 extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.frag_page_1, container, false);
        WebView wv = (WebView) rootView.findViewById(R.id.webView1);
        wv.loadUrl("file:///android_asset/html/tabel1.html");
        wv.setBackgroundColor(0x00000000);
        wv.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
        return rootView;
    }

    public static Frag1 newInstance(){
        Frag1 f = new Frag1();
        return f;
    }

}
错误行为如下:当活动开始时,显示第一个片段,但“活动”项目符号点是第二个,对于第二页,活动点是第三个,对于第三页,活动点是第四个,对于第四页,第四个点保持活动。如果我滑回第三页,则第二个项目符号处于活动状态

简单来说,活动项目符号与显示的页面不匹配

我尝试打印适配器中的位置,如下所示,在每个情况下:

活动开始时,将打印两条连续消息0和1,而不与ViewPager交互

当我更改页面时,位置总是错误的,但相对片段显示正确

我试图在fragments类中设置项目符号状态,但没有任何更改


为什么适配器指示错误的位置?如何使正确的项目符号指示正确显示的页面

ViewPager将加载可见片段和周围的其他片段。如果打开片段3,它将为2和4调用getView。如果打开0,它也会加载1好的,但是我如何才能获得打开片段的正确位置?就像在listview中,您不使用适配器获取当前位置,而是使用列表。使用ViewPager.setOnPageChangeListener来做这件事,我试过了,效果很好。我已经尝试过ViewPager.setOnPageChangeListener,但总是在适配器内部。糟糕的选择。非常感谢。
Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();