当许多线程可以在进度条上设置开/关状态时如何解决此问题



我有这个AppCompatActivity,它托管了一个包含 3 个FragmentsViewPager,现在我在AppCompatActivitytoolbar有这个ProgressBar,每个片段都可以使用以下调用打开/关闭:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onShowProgressBar(OnRequestToShowProgressBarEvent onRequestToShowProgressBarEvent) {
progressIndicator.setVisibility(View.VISIBLE);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onHideProgressBar(OnRequestToHideProgressBarEvent onRequestToHideProgressBarEvent) {
progressIndicator.setVisibility(View.INVISIBLE);
}

Fragment独立工作,在做工作时,他们可以打开ProgressBar并在完成后将其关闭。

现在我想到这将失败,因为Frag_1可以打开ProgressBar,Frag_2可以关闭它,但Frag_1仍然没有完成工作,应该打开ProgressBar但现在它是正确的。

如何解决这个问题?

回答我自己的问题,我认为这可能会起作用,跟进 Marconcini 评论,我将逻辑放在ProgressBar居住的地方,如下所示:

protected ProgressBar progressIndicator;
private final Stack<String> progressBarStack;

@Subscribe(threadMode = ThreadMode.MAIN)
public void onShowProgressBar(OnRequestToShowProgressBarEvent onRequestToShowProgressBarEvent) {
synchronized (progressBarStack) {
progressBarStack.push("show");
progressIndicator.setVisibility(View.VISIBLE);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onHideProgressBar(OnRequestToHideProgressBarEvent onRequestToHideProgressBarEvent) {
synchronized (progressBarStack) {
progressBarStack.pop();
if (progressBarStack.empty())
progressIndicator.setVisibility(View.INVISIBLE);
}
} 

在这里,3 Frags必须承诺在他们打电话后进行讨价还价onHideProgressBar()onShowProgressBar()

这似乎有效,但可能有一些我没有想到的蛀牙。

最新更新