2

我有一个片段,它将 ViewPager 与自定义视图和顶部栏中的微调器结合在一起。每次更改 viewpager 中的页面时,我都必须从 db 更新微调器中的字符串。为此,在 viewPager 侦听器的 onPageSelected 中,我启动了一个线程,该线程从数据库中检索数据并通过 runOnUiThread 微调器的适配器进行更新。问题是为微调器的适配器调用的 notifyDataSetChanged() 滞后于 viewpager:它必须重建几个视图,但它有点滞后。

            @Override
        public void onPageSelected(final int pos) {
            new Thread(new Runnable() {
                @Override
                public void run() {

...

                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mSpinnerAdapter.notifyDataSetChanged();
                        }
                    });
                }
            }).start();
        }

如何解决这个问题?可以在优先级最低的主线程上运行代码吗?

4

2 回答 2

0

首先,移除 Thread,然后尝试移除 runOnUiThread。

于 2012-10-12T14:42:03.007 回答
0

你应该能够逃脱:

       @Override
    public void onPageSelected(final int pos) {
        ... // your hidden code
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mSpinnerAdapter.notifyDataSetChanged();
            }
        });
    }

不需要新线程的东西。

于 2012-10-12T14:44:41.977 回答