在我的应用程序中,我使用了 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
获取数据在屏幕上,您可以使用 setOnPageChangeListener
为 Pager
获取当前位置。然后将 SparseArray
和 WeakReference
放到您的 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/