Estou usando o ViewPager da biblioteca de compatibilidade. Consegui exibi-lo com sucesso, com várias visualizações nas quais posso paginar.
No entanto, estou tendo dificuldade para descobrir como atualizar o ViewPager com um novo conjunto de modos de exibição.
Eu tentei todo tipo de coisa como ligar mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
até mesmo criar um adaptador totalmente novo sempre que eu quiser usar uma nova lista de dados.
Nada ajudou, as visualizações de texto permanecem inalteradas em relação aos dados originais.
Atualização: fiz um pequeno projeto de teste e quase consegui atualizar as visualizações. Vou colar a turma abaixo.
O que parece não atualizar, no entanto, é a segunda visualização, o 'B' permanece; ele deve exibir 'Y' depois de pressionar o botão de atualização.
public class ViewPagerBugActivity extends Activity {
private ViewPager myViewPager;
private List<String> data;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
data = new ArrayList<String>();
data.add("A");
data.add("B");
data.add("C");
myViewPager = (ViewPager) findViewById(R.id.my_view_pager);
myViewPager.setAdapter(new MyViewPagerAdapter(this, data));
Button updateButton = (Button) findViewById(R.id.update_button);
updateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
updateViewPager();
}
});
}
private void updateViewPager() {
data.clear();
data.add("X");
data.add("Y");
data.add("Z");
myViewPager.getAdapter().notifyDataSetChanged();
}
private class MyViewPagerAdapter extends PagerAdapter {
private List<String> data;
private Context ctx;
public MyViewPagerAdapter(Context ctx, List<String> data) {
this.ctx = ctx;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object instantiateItem(View collection, int position) {
TextView view = new TextView(ctx);
view.setText(data.get(position));
((ViewPager)collection).addView(view);
return view;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public void startUpdate(View arg0) {
}
@Override
public void finishUpdate(View arg0) {
}
}
}