ProgressBar没有animation时,充气viewstub

我有一个这样的结构的活动:

FrameLayout ProgressBar ViewStub 

ViewStub在一个单独的线程中膨胀一个片段。 我需要的是在片段加载时显示进度。 问题是ProgressBar没有旋转,而存根膨胀(在我的情况下大约半秒:这是一个沉重的片段)我试过一切:显示/隐藏视图,无效,在ViewSwitchers中显示它们等等,工作,一旦ViewStub膨胀,它开始旋转,这就像Ui被冻结,而它膨胀,但在另一个线程似乎并没有改善。 我该怎么办?

Solutions Collecting From Web of "ProgressBar没有animation时,充气viewstub"

片段必须在UI线程中加载,并且由于UI忙于片段,ProgressBar不会旋转 。 你需要将片段中的数据加载到UI的东西。 我会testing和检查什么是正在运行,并保持快速启动片段,我会使用一个加载器来加载数据,同时呈现给用户(在片段内)的进度条。 是的,将进度移动到片段的布局,并控制从那里的一切,因为我不知道什么时候片段完成加载的活动,活动不假设要关心这一点。

基本上@Luksprog在他的评论中说的是正确的,如果你调用viewStub.post()这不会运行后台线程中的post内的代码。 它所做的就是将可运行的post发布到UI线程。 它可能会工作,如果你这样做

 new Thread(new Runnable() { @Override public void run() { viewStub.inflate(); initFragment(); } }).start() 

虽然@Luksprog也说过 – 在后台线程上实例化视图是不好的做法。 所以也许最好的解决scheme是将.inflate()调用移到外部(到主线程),然后从后台线程中调用initFragment(),并把所有重要的东西放在那里。