Saya menggunakan ViewPager dari perpustakaan kompatibilitas. Saya telah berhasil menampilkan beberapa tampilan yang bisa saya lihat.
Namun, saya mengalami kesulitan mencari tahu cara memperbarui ViewPager dengan serangkaian Tampilan baru.
Saya sudah mencoba segala macam hal seperti menelepon mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
bahkan membuat adaptor baru setiap kali saya ingin menggunakan Daftar data baru.
Tidak ada yang membantu, tampilan teks tetap tidak berubah dari data asli.
Pembaruan: Saya membuat proyek uji kecil dan saya hampir dapat memperbarui pandangan. Saya akan menempelkan kelas di bawah ini.
Apa yang tampaknya tidak memperbarui adalah tampilan ke-2, 'B' tetap, itu akan menampilkan 'Y' setelah menekan tombol pembaruan.
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) {
}
}
}