如何通过网络调用告诉活动片段已完成

时间:2016-07-05 22:03:19

标签: android android-fragments retrofit

我遇到这种情况:

  1. 我得到了一个主要活动,当用户启动应用程序时,用户将打开该活动,该活动是Viewpager和顶部栏中的标签,因此用户可以在4个片段之间导航。

  2. 每个片段都在使用改造来做一些网络请求,如加载新闻数据,加载部分等。

  3. 我正在以经典的方式向寻呼机添加片段:

    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个片段都完成网络调用。如何通知主要活动片段网络呼叫已完成?我

1 个答案:

答案 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.
    }
}