Android:FragmentPagerAdapter:第一次调用两次的getItem方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

在我的应用程序中,我使用了ViewPager。

(say main.xml)

<android.support.v4.view.ViewPager
     android:id="@+id/viewPager"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_above="@+id/register_header" />

并在FragmentActivity中创建ViewPager对象和ViewPagerAdapter(它扩展了FragmentPagerAdapter)对象:

_mViewPager = (ViewPager) findViewById(R.id.viewPager);

_adapter = new ViewPagerAdapter(getApplicationContext(),
         getSupportFragmentManager());

_mViewPager.setAdapter(_adapter);

而Adapter类:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private Context _context;
    private FragmentManager manager;
    private Fragment f;
    private String classname="ViewPagerAdapter";
    public ViewPagerAdapter(Context context, FragmentManager fm) {
        super(fm);  
        _context=context;
        manager=fm;
        }
    @Override
    public Fragment getItem(int position) {
        Log.i(classname,"getItem called"+position);
        f = new Fragment();
        f=MyFragment.newInstance();
        Bundle args = new Bundle();
        args.putInt("position", position);
        f.setArguments(args);
        return f;
    }

    @Override
    public int getCount() {
        return User.getPageCount();
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

而在MyFragment类中,

在onResume中,我必须将wigets对象存储到常用的静态变量中:

public void onResume() {
        super.onResume();
        pageIndex = getArguments().getInt("position");      
        User.useTextview1=textview1;
        User.useTextview2= textview2;
        User.current_pageIndex=pageIndex;



    }

提问于
用户回答回答于

FragmentPagerAdapter实例化2 Fragments上启动,索引0和索引1.如果你想获得的数据来自Fragment其在屏幕上,你可以使用setOnPageChangeListenerPager获得当前位置。然后SparseArrayWeakReference你的碎片。在getItem调用中更新该数组。当onPageSelected被调用时使用该位置来获取正确的参考Fragment并更新User数据。

数组的初始化:

private SparseArray<WeakReference<MyFragment>> mFragments = new SparseArray<WeakReference<MyFragment>>(3);
用户回答回答于

我的问题是第一次调用getItem()方法两次

这不是问题,这是default feature of FragmentPagerAdapter。它适合你从这个页面滑动到下一个和上一个:

在模拟器中显示的视图是第0个索引,但在FragmentActivity中获得第1个索引值

我遇到了同样的问题,我知道为什么。这是因为你used same Fragment in View Pager

扫码关注云+社区