寻呼机适配器在我到达最后一项时未注册



我有一个寻呼机适配器,可以显示我的应用程序上的内容。我希望它记住方向改变时它所在的位置。它适用于所有情况,除了我转到最后一个选项卡时。它显示得很好,但是当我更改方向时,它会返回到上一个选项卡。它只发生在那一种情况下。我添加了一个日志以查看它是否记录了位置的变化,除了最后一个选项卡之外,它在任何地方都这样做。

从简历:

//A lot of code here
//if no book opened
    if (s.getLibro() == null){
        s.setLibro("Test");
    }
    if (s.getCap() == 0){
        s.setCap(1);
    }
//More code....
MyPagerAdapter adapter = new MyPagerAdapter();
    pager = (ViewPager) findViewById(R.id.my_pager);
    pager.setAdapter(adapter);
    tabIndicator = (TabPageIndicator) findViewById(R.id.tab_indicator);
    tabIndicator.setViewPager(pager);
    pager.setCurrentItem(s.getCap()-1); 
    tabIndicator.setCurrentItem(s.getCap()-1);
    Log.v(TAG, "FInished onResume");

寻呼机适配器:

private class MyPagerAdapter extends PagerAdapter {
    @Override
    public int getCount() {
        return numCap;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = (LayoutInflater) container.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final ListView list = (ListView) inflater.inflate(R.layout.capitulo, null);
        //set the chapter you left off at, in case you change orientation
        s.setCap(position);
        //Load content
        listll(position);
        //Display it
        list.setAdapter(new CapituloAdapter(getApplicationContext(), R.layout.content_main, ll));
        ((ViewPager) container).addView(list, 0);

        //Only shows when position is any item from the first to the next to last, doesn't show for last item
        Log.v(TAG, "Finished my pager adapter object" + (position-1));
        return list;
    }
//more code here...

事实上,这条线 Log.v(TAG, "已完成我的寻呼机适配器对象" + (位置-1));当我进入最后一个选项卡时没有出现让我担心。不确定问题是什么。当我浏览应用程序时,它似乎工作正常(我可以看到最后一个选项卡而没有问题)。

PagerAdapter预加载下一页。IE 当您查看第 2 页时,PagerAdapter加载第 3 页。您可以通过从最后一个实例化页面中减去 1 来获取当前页面。这会在最后一页中断,因为适配器不会加载下一页(因为没有下一页)。

获取当前位置

的正确方法是保存当前位置免受ViewPager.OnPageChangeListener()

最新更新