在这里,我解释了我的问题。我安装了一个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);
你能帮我吗?
答案 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函数时,需要进行所有更改。