Android fragmentpageradapter更新数据

时间:2014-12-05 02:04:06

标签: android android-fragments android-viewpager fragmentpageradapter android-pageradapter

在这里,我解释了我的问题。我安装了一个ViewPager和FragmentPagerAdapter,因此您可以在两个页面之间滑动。 每个片段都包含数据(TextView)。 使用作为参数传递的数据创建我的ViewPager时一切顺利。 但是,如果我想更改数据(即片段的内容),则不会刷新

public class MaPagerAdapter extends FragmentPagerAdapter {

    private Meteo[]lameteo;


    public MaPagerAdapter(FragmentManager fm, Meteo[]lameteo) {
            super(fm);
            this.lameteo = lameteo;
            Log.i("aa", "ville maPagerAdapter"+lameteo[0].getLoc());
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
        case 0: return page_droite.newInstance(lameteo[0]);
        case 1: return page_gauche.newInstance(lameteo);
        }
        return null;
    }
    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    public void setData(Meteo[] meteo){
        this.lameteo=meteo;
    }
    @Override
    public int getCount() {
            return 2;
    }

}

我的主要

if(mPagerAdapter!=null){ //if pagerAdapter already initialized
        mPagerAdapter.setData(meteo);
        mPagerAdapter.notifyDataSetChanged();
        }else
        mPagerAdapter = new MaPagerAdapter(getSupportFragmentManager(), meteo);
        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(mPagerAdapter);

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

不,寻呼机适配器无法正常工作。 Android没有意识到你的片段中有特定的数据,所以它不知道如何更新它。

您必须在setData调用中获取对片段的引用,然后您必须在片段中编写可以调用以重置其数据的新方法。在片段内部,您必须确保使用新数据更新片段的视图。但至于你的适配器,你可以这样做:

public class MaPagerAdapter extends FragmentPagerAdapter {

    private Meteo[]lameteo;
    private FragmentManager fm;

    public MaPagerAdapter(FragmentManager fm, Meteo[]lameteo) {
        super(fm);
        this.fm = fm;
        this.lameteo = lameteo;
        Log.i("aa", "ville maPagerAdapter"+lameteo[0].getLoc());
    }

    public void setData(Meteo[] meteo){
        this.lameteo=meteo;

        page_droite droite = (page_droite) getFragment(0);
        droite.setData(meteo[0]);
        page_gauche gauche = (page_gauche) getFragment(1);
        gauche.setData(meteo);
    }

    private Fragment getFragment(int position) {
        String tag = "android:switcher:" + R.id.viewpager + ":" + getItemId(position);
        return fm.findFragmentByTag(tag);
    }

请注意,在这种情况下不需要调用notifyDataSetChanged,因为您的适配器中仍然有相同的片段。在片段中实现setData函数时,需要进行所有更改。