viewpagerで、Fragmentを利用する場合、
Activityの様に実装しても、更新されません。
FragmentPagerAdapter内では、Fragmentmanagerにて管理されているため、こちらを更新させる必要があります。
##FragmentPagerAdapterの実装
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
public void destroyAllItem(ViewPager pager) {
for (int i = 0; i < getCount() - 1; i++) {
try {
Object obj = this.instantiateItem(pager, i);
if (obj != null)
destroyItem(pager, i, obj);
} catch (Exception e) {
}
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
if (position <= getCount()) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
}
}
2016/01/25 ご指摘のありました、下記については、申し訳ありませんが、私の方にて試すことが暫くできないため、実装者様側にて、getCount() - 1 が正しいかは判断お願い致します。
for (int i = 0; i < getCount() - 1; i++) {
⚠️getItemPosition()で、POSITION_NONEをreturnする
##Activity側の実装
public class MainActivity extends ActionBarActivity {
private FragmentAdapter _pagerAdapter;
private void updateFragment() {
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setOnPageChangeListener(pagerListner);
_pagerAdapter.destroyAllItem(pager);
_pagerAdapter.setResource(resources);
_pagerAdapter.notifyDataSetChanged();
pager.setAdapter(_pagerAdapter);
}
}
私がやりたかったのは、3枚のFragmentをボタンアクション時に、異なった内容の3枚のFragmentに変更する
ことだったので、変更ボタンaction時に
まず、
destroyAllItem()
をcallします。
次に、新しいリソース(表示したいもの)をセット
setResource()
そして、
notifyDataSetChanged()
で変更通知
viewpagerにadapterをセットして完了
ちょっと適当に作っていますが、、、
サンプルソース