Android:FragmentPagerAdapter:第一次调用两次getItem方法

Sri*_*har 24 android android-pageradapter

在我的应用程序中,我使用了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" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

_mViewPager.setAdapter(_adapter);
Run Code Online (Sandbox Code Playgroud)

而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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在MyFragment Class中,

在onResume中,我必须将wigets对象存储到公共静态变量中.

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



    }
Run Code Online (Sandbox Code Playgroud)

我必须更新从FragmentActivity中的User类获取的textviews. 我的问题是getItem()方法在第一次调用时被调用两次 实际上,模拟器中显示的视图是第0个索引,但在FragmentActivity中获得了第一个索引值.如果我第二次停止调用getItem()方法,我可以在FragmentActivity中获得第0个索引TextView引用.

请告诉我最好的方法.

谢谢

Nik*_*iko 18

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

数组的初始化:

private SparseArray<WeakReference<MyFragment>> mFragments = new SparseArray<WeakReference<MyFragment>>(3);
Run Code Online (Sandbox Code Playgroud)