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

标签 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" />

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

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

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

_mViewPager.setAdapter(_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)静态变量中。

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



    }

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

请为我提供最好的方法。

谢谢

最佳答案

FragmentPagerAdapter 在开始时为索引 0 和索引 1 实例化 2 个 Fragment。如果你想从 Fragment 获取数据在屏幕上,您可以使用 setOnPageChangeListenerPager 获取当前位置。然后将 SparseArrayWeakReference 放到您的 fragment 中。在 getItem 调用中更新该数组。当 onPageSelected 被调用时,使用该位置来获取对正确 Fragment 的引用并更新 User 数据。

数组初始化:

private SparseArray<WeakReference<MyFragment>> mFragments = new SparseArray<WeakReference<MyFragment>>(3);

关于Android:FragmentPagerAdapter:第一次调用两次 getItem 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15218904/

相关文章:

android - 如何让ViewPager频繁更新?

android - 在方向更改时在 PagerAdapter 中保存 EditText 的状态

android - 是否可以使用 Kivy(+Python) 执行 "pen mode"?

Android文本过度放大文本大小

android - 在操作栏中设置 fragment 内的自定义 View

java - 滑动时刷新 Android Viewpager fragment

android - PagerAdapter 的 instantiateItem(ViewGroup container, int position) 方法的一些困惑

android - 在 ListView 之后滑动 Activity

安卓 : Change color of blue shine (blue highlight) in List View

android - 如何从 Android 中的应用程序访问文件