问题:
I'm using the ViewPager from the compatibility library. 我正在使用兼容性库中的ViewPager。 I have succussfully got it displaying several views which I can page through. 我已经巧妙地让它显示了几个我可以翻阅的视图。
However, I'm having a hard time figuring out how to update the ViewPager with a new set of Views. 但是,我很难弄清楚如何使用一组新视图更新ViewPager。
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. 没有任何帮助,文本视图与原始数据保持不变。
Update: I made a little test project and I've almost been able to update the views. 更新:我做了一个小测试项目,我几乎能够更新视图。 I'll paste the class below. 我将粘贴下面的课程。
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”。
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) {
}
}
}
解决方案:
参考一: https://stackoom.com/question/UTVr/ViewPager-PagerAdapter未更新视图参考二: https://oldbug.net/q/UTVr/ViewPager-PagerAdapter-not-updating-the-View
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/4411260