I'm using the ViewPager from the compatibility library. 我正在使用兼容性库中的ViewPager。 I have succussfully got it displaying several views which I can page through. 我已经巧妙地让它显示了几个我能够翻阅的视图。 app
However, I'm having a hard time figuring out how to update the ViewPager with a new set of Views. 可是,我很难弄清楚如何使用一组新视图更新ViewPager。 ide
I've tried all sorts of things like calling mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
even creating a brand new adapter each time I want to use a new List of data. 我已经尝试了各类各样的事情,好比调用mAdapter.notifyDataSetChanged()
, mViewPager.invalidate()
甚至每次我想使用新的数据列表时建立一个全新的适配器。 测试
Nothing has helped, the textviews remain unchanged from the original data. 没有任何帮助,文本视图与原始数据保持不变。 this
Update: I made a little test project and I've almost been able to update the views. 更新:我作了一个小测试项目,我几乎可以更新视图。 I'll paste the class below. 我将粘贴下面的课程。 spa
What doesn't appear to update however is the 2nd view, the 'B' remains, it should display 'Y' after pressing the update button. 然而,彷佛没有更新的是第二个视图,“B”仍然存在,按下更新按钮后应显示“Y”。 .net
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) { } } }