ViewPager PagerAdapter未更新视图 - ViewPager PagerAdapter not updating the View

问题:

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) {
        }
    }
}

解决方案:

参考一: https://stackoom.com/question/UTVr/ViewPager-PagerAdapter未更新视图
参考二: https://oldbug.net/q/UTVr/ViewPager-PagerAdapter-not-updating-the-View
相关文章
相关标签/搜索