ViewPager PagerAdapter未更新视图

耗尽温柔 提交于 2020-08-15 02:18:14

问题:

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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!