我有一个具有这种结构的活动:
FrameLayout
ProgressBar
ViewStub
ViewStub在一个单独的线程中膨胀一个Fragment。我需要的是在片段加载时显示进度。 问题是当存根膨胀时,ProgressBar没有旋转(在我的情况下大约半秒:它是一个沉重的碎片) 我已经尝试了一切:显示/隐藏视图,无效,在ViewSwitchers中显示它们等等,没有任何作用,一旦ViewStub膨胀,它开始旋转,就像ui在它膨胀时被冻结但是在另一个线程似乎没有改善。 我该怎么办?
答案 0 :(得分:4)
片段必须加载到UI线程上,并且因为UI忙于片段,所以ProgressBar不会旋转。 您需要将片段中的数据加载分配给UI内容。我会测试并检查究竟是什么运行并保持片段快速启动,我会使用加载器来加载数据,同时向用户呈现进度条(在片段内)。是的,将进度移动到片段的布局并从那里控制所有内容,因为我不知道片段何时完成加载的活动,活动并不认为关心它。
答案 1 :(得分:1)
基本上,如果你调用viewStub.post(),那么@Luksprog在他的评论中说的是正确的,这不会在后台线程上的帖子中运行代码。它只是将runnable发布到UI线程。如果你这样做可能会有效
strSQL = "SELECT * FROM [Sheet$3] & ;"
虽然@Luksprog也表示 - 在后台线程上实例化视图是不好的做法。所以也许最好的解决方案是将.inflate()调用移到(在主线程上),然后从后台线程中调用initFragment()并将所有繁重的工作放在那里。