我有这个AppCompatActivity
,它托管了一个包含 3 个Fragments
的ViewPager
,现在我在AppCompatActivity
toolbar
有这个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()
这似乎有效,但可能有一些我没有想到的蛀牙。