【问题标题】:Android fragmentpageradapter update dataAndroid fragmentpageadapter 更新数据
【发布时间】:2014-12-05 02:04:05
【问题描述】:

在这里,我解释一下我的问题。我安装了 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);

你能帮帮我吗?

【问题讨论】:

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


    【解决方案1】:

    不,寻呼机适配器不能那样工作。 Android 没有意识到您的 Fragment 中有特定的数据,因此它不知道如何更新它。

    您必须在 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 函数时,您需要进行所有更改。

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2016-04-10
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多