我遇到这种情况:
我得到了一个主要活动,当用户启动应用程序时,用户将打开该活动,该活动是Viewpager和顶部栏中的标签,因此用户可以在4个片段之间导航。
每个片段都在使用改造来做一些网络请求,如加载新闻数据,加载部分等。
我正在以经典的方式向寻呼机添加片段:
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new WelcomeFragment(), "Home");
adapter.addFrag(new NewsFragment(), "News");
adapter.addFrag(new AboutFragment(), "About");
adapter.addFrag(new Locators(), "Locations");
viewPager.setAdapter(adapter);
}
片段中的网络调用由Retrofit完成(示例调用如下:)
NetworkSDK.getInstance().getNews(size, offset, new Callback<List<News>>() {
@Override
public void onResponse(Call<List<News>> call, Response<List<News>> response) {
}
@Override
public void onFailure(Call<List<News>> call, Throwable t) {
}
});
现在我想实现某种进度条(加载器),它将在主活动上旋转,直到所有4个片段都完成网络调用。如何通知主要活动片段网络呼叫已完成?我
答案 0 :(得分:0)
对于从Fragment到其Activity的通信,您可以在Fragment类中定义一个接口并在Activity中实现它。 Fragment在其onAttach()生命周期方法中捕获接口实现,然后可以调用Interface方法以与Activity通信。您可以使用接口与活动进行通信。 Check Communicate from Fragment to Activity official documentation.
首先想到的蛮力解决方案是,您可以在活动中拥有4个布尔值。使用接口与Activity通信。当每个人都收到数据时,将相应的bool设置为true。然后,当所有4都设置为true时,关闭对话框。以下代码片段可能会让我更好地了解我要传达的内容。
bool a,b,c,d;
public void setA(bool success) {
a = true;
closeDialogIfPossible();
}
public void setB(bool success) {
b = true;
closeDialogIfPossible();
}
...
public void closeDialogIfPossible() {
if (a && b && c && d) {
// Close dialog here.
}
}