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
相關文章
相關標籤/搜索