Android:FragmentPagerAdapter:第一次调用两次的getItem方法 [英] Android: FragmentPagerAdapter: getItem method called twice on First time
问题描述
在我的应用程序中,我使用了ViewPager. 喜欢,
In My application, I have used the ViewPager. Like,
(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的对象).
And Create ViewPager object and ViewPagerAdapter(which extends FragmentPagerAdapter) object in FragmentActivity.
_mViewPager = (ViewPager) findViewById(R.id.viewPager);
_adapter = new ViewPagerAdapter(getApplicationContext(),
getSupportFragmentManager());
_mViewPager.setAdapter(_adapter);
而Adapter类就像
And the Adapter class is like,
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类中,
And in MyFragment Class,
在onResume中,我必须将wigets对象存储到公共静态变量中.
In onResume , I have to store the wigets object to the common static variable.
public void onResume() {
super.onResume();
pageIndex = getArguments().getInt("position");
User.useTextview1=textview1;
User.useTextview2= textview2;
User.current_pageIndex=pageIndex;
}
我必须更新从FragmentActivity中的User类获得的文本视图. 我的问题是,第一次调用getItem()方法两次 在Fact中,仿真器中显示的视图为第0个索引,但在FragmentActivity中获得了第1个Index值. 如果我第二次停止了对getItem()方法的调用,则可以在FragmentActivity中获取第0个索引TextView引用.
I have to update the textviews got from the User class in the FragmentActivity. My Problem is getItem() method is called twice on First time In Fact , the view displayed in the emulator is 0th index, but got 1st Index value in the FragmentActivity. If I stopped the calling of getItem() method on second time, I can able to get the 0th index TextView reference in the FragmentActivity.
请提供给我最好的方法.
Please provide me the best way to do this.
谢谢
推荐答案
FragmentPagerAdapter
在开始时实例化2 Fragments
,用于索引0和索引1.在屏幕上,您可以将setOnPageChangeListener
用于Pager
以获取当前位置.然后对片段使用SparseArray
和WeakReference
.在getItem
调用中更新该数组.当onPageSelected
被调用时,使用该位置获取正确的Fragment
引用并更新User
数据.
The FragmentPagerAdapter
instantiates 2 Fragments
on start, for index 0 and for index 1. If you want to get data from the Fragment
which is on the screen, you can use setOnPageChangeListener
for the Pager
to get current position. Then have SparseArray
with WeakReference
to your fragments. Update that array in the getItem
call. When onPageSelected
gets called use that position to get reference to right Fragment
and update User
data.
数组的初始化:
private SparseArray<WeakReference<MyFragment>> mFragments = new SparseArray<WeakReference<MyFragment>>(3);
这篇关于Android:FragmentPagerAdapter:第一次调用两次的getItem方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!