Tôi đang sử dụng ViewPager từ thư viện tương thích. Tôi đã thành công trong việc hiển thị một số lượt xem mà tôi có thể xem qua.
Tuy nhiên, tôi đang gặp khó khăn khi tìm cách cập nhật ViewPager với một nhóm Chế độ xem mới.
Tôi đã thử tất cả mọi thứ như gọi điện mAdapter.notifyDataSetChanged()
,mViewPager.invalidate()
thậm chí tạo một bộ chuyển đổi hoàn toàn mới mỗi lần tôi muốn sử dụng Danh sách dữ liệu mới.
Không có gì giúp được, các bài viết vẫn không thay đổi so với dữ liệu gốc.
Cập nhật: Tôi đã thực hiện một dự án thử nghiệm nhỏ và tôi gần như có thể cập nhật các chế độ xem. Tôi sẽ dán lớp bên dưới.
Tuy nhiên, thứ không xuất hiện để cập nhật là chế độ xem thứ 2, 'B' vẫn còn, nó sẽ hiển thị 'Y' sau khi nhấn nút cập nhật.
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) {
}
}
}