Ich verwende den ViewPager aus der Kompatibilitätsbibliothek. Ich habe es erfolgreich dazu gebracht, mehrere Ansichten anzuzeigen, durch die ich blättern kann.
Es fällt mir jedoch schwer, herauszufinden, wie ich den ViewPager mit neuen Ansichten aktualisieren kann.
Ich habe alle möglichen Dinge versucht , wie der Aufruf mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
auch eine brandneue Adapter jedes Mal zu schaffen ich eine neue Liste der Daten verwendet werden soll.
Nichts hat geholfen, die Textansichten bleiben gegenüber den Originaldaten unverändert.
Update: Ich habe ein kleines Testprojekt erstellt und konnte die Ansichten fast aktualisieren. Ich werde die Klasse unten einfügen.
Was jedoch nicht zu aktualisieren scheint, ist die 2. Ansicht. Das 'B' bleibt erhalten. Nach dem Drücken der Update-Taste sollte 'Y' angezeigt werden.
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) {
}
}
}