切换标签页很慢/卡顿 - 使用Fragment

7
我有一个使用选项卡的 Activity,这些选项卡会切换 Fragment。问题是,在创建 Fragment 时,它们需要几秒钟的时间来加载,因此切换选项卡会有1或2秒的延迟。为了解决这个问题,我一直在寻找一种方法来显示简单的加载图形或进度对话框,以便选项卡可以立即切换,并显示一些指示正在加载的内容,直到所有内容都加载完成。
我的 Fragment 的 onCreateView 方法如下所示:
FrameLayout fl;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    fl = (FrameLayout) inflater.inflate(R.layout.text_layout, container, false);

    doHeavyStuff();

    return fl;
 }

我尝试将 doHeavyStuff() 放在 onStart() 中,但这并没有起到任何帮助。线程也无法解决问题,因为 doHeavyStuff() 涉及到操作视图/GUI。
你有什么想法可以在显示片段的同时展示 "正在加载" 信息吗?
谢谢!
马特。
2个回答

8
onActivityCreated()中:
  • 启动一个进度条(或任何显示进度的UI元素)。
  • 执行下面解释的HeavyStuffDoingAsyncTask

HeavyStuffDoingAsyncTask 应该包含:

  • doHeayStuff()的逻辑应该不在doInBackground方法中更新ui
  • 每次想要更新ui时,都要从doInBackground()调用publishProgress()
  • onProgressUpdate方法中实现UI更新逻辑。
  • onPostExecute方法中停止进度条。
祝好运。

我只是在onCreateView()方法中膨胀视图,但这也会导致卡顿。所以,为了提高性能,我应该改变这个膨胀代码吗? - Hussain Mansoor
除了填充视图之外,您还做了其他事情吗?例如填充视图等。如果是这样,您应该在onCreateView()之外完成填充部分,以避免滞后行为。 - 500865
不,我只是在填充视图。 return inflater.inflate(R.layout.setting_list_layout, container, false); 是onCreateView()中唯一的一行代码。 - Hussain Mansoor
将完整的代码发布为新问题。你可能会得到一些帮助。我认为卡顿的行为是由于其他原因造成的。 - 500865

3
尝试设置。
pager.setOffscreenPageLimit(no_of_fragments or pages);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接