ViewPagerAdapter返回错误的位置

时间:2014-10-14 09:38:19

标签: 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 = (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;
    }

}

错误的行为如下:当活动开始时,显示第一个片段,但“活动”项目符号点是第二个,第二个页面活动点是第三个,第三个页面活动第四个,对于第四页,第四点仍然有效。如果我向后滑动到第三页,则第二个项目符号点处于活动状态。

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

我尝试在每个Adapter下的case:中打印位置,如下所示:

Toast.makeText(context, String.valueOf(position), Toast.LENGTH_SHORT).show();

当活动开始时,会连续打印两条消息01,而不会与ViewPager交互。

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

我试图在片段类中设置项目符号点状态,但没有任何改变。

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

0 个答案:

没有答案