【问题标题】:notifyDataSetChanged poor performance with viewpager fragmentsnotifyDataSetChanged viewpager 片段性能不佳
【发布时间】:2013-06-03 10:17:18
【问题描述】:

我有一个带有四个片段的 ViewPager。用户在第一个片段上填写数据,点击一个按钮,数据进入 sqlite。然后使用其他三个片段以各种方式显示 sqlite DB 中的数据。第一个只是在列表视图中列出它们。问题是片段上的数据没有更新,直到我到达最后一个片段屏幕并交换回来。所以我在想这可能与我设置的 setOffscreenPageLimit 有关

mypager.setOffscreenPageLimit(1);

在我的 ViewPager 的 onCreate 中,似乎没有任何影响。 然后我想覆盖 onPageSelected 并在那里添加

mypager.notifyDataSetChanged();

这可行,但是片段之间的滑动很慢。如果我再次取出它并滑动最后一个片段然后片段更新,它非常快。 有人有什么想法吗?

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    我不熟悉 ViewPager,但是,每次调用 notifyDataSetChanged() 时,寻呼机都会从数据库中获取数据。

    我建议不要在每次页面更改时都更新光标,而是在调用 notifyDataSetChanged() 之前创建一个函数来检查数据集是否确实发生了更改。这样一来,当用户更改 Page1 上的数据时,您只会受到性能损失,但从那里开始,所有页面滑动都将是即时的,直到再次更改数据。

    希望这对您的问题有所帮助。

    【讨论】:

      【解决方案2】:

      为了平滑地滑动片段,在 onCreateView() 中运行长时间执行的代码需要一些延迟,例如 150-250 毫秒。

      过渡动画是在 UI 线程中执行的,因此如果您运行其他任何花费大量时间的东西(例如 SQLite db 访问),同时过渡的平滑度也会受到影响。

      YourFragments extends Fragment {
      
      ...
      Handler mHanlder = new Handler();
      
        @Override
        public void onCreate(...){
      
        ...
        mHandler.postDelayed(someRunnable, 250);
        ...
        }
      
      }
      

      【讨论】:

      • 不确定这是正确的方法,需要进一步调查。有趣的是,如果您从屏幕上滑动到片段并返回到带有列表视图的片段,它会非常非常快地更新,这就是我想要的,就在第一次滑动时:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2015-10-16
      相关资源
      最近更新 更多