Sto usando ViewPager dalla libreria di compatibilità. Ho ottenuto con successo la visualizzazione di diverse visualizzazioni che posso sfogliare.
Tuttavia, faccio fatica a capire come aggiornare ViewPager con un nuovo set di visualizzazioni.
Ho provato ogni sorta di cose come chiamare mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
anche creando un adattatore nuovo di zecca ogni volta che voglio usare un nuovo elenco di dati.
Nulla ha aiutato, le visualizzazioni di testo rimangono invariate rispetto ai dati originali.
Aggiornamento: ho realizzato un piccolo progetto di test e sono quasi riuscito ad aggiornare le visualizzazioni. Incollerò la classe qui sotto.
Ciò che non sembra aggiornare, tuttavia, è la seconda vista, la 'B' rimane, dovrebbe visualizzare 'Y' dopo aver premuto il pulsante di aggiornamento.
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) {
}
}
}