Android:FragmentPagerAdapter:第一次调用两次的getItem方法 [英] Android: FragmentPagerAdapter: getItem method called twice on First time

查看:528
本文介绍了Android:FragmentPagerAdapter:第一次调用两次的getItem方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我使用了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以获取当前位置.然后对片段使用SparseArrayWeakReference.在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆