Android MVP与两个片段共享相同的数据

时间:2017-04-17 08:27:16

标签: android json android-fragments mvp

我的应用有一个活动和两个片段。该活动仅用作片段容器。其中一个片段将数据显示为文本。第二个片段显示与图表相同的数据。此数据来自远程JSON API。与在MVP中一样,我们必须为每个视图(模块,模型,演示者,存储库......)复制相同的结构。我的应用程序为每个片段请求来自JSON API的数据,因此两次。我怎样才能拥有一个更高效的架构,让我尊重MVP?

请参阅下面为我的两个片段实现的代码:

模块

@Module
public class PollutionLevelsModule {
    @Provides
        public PollutionLevelsFragmentMVP.Presenter providePollutionLevelsFragmentPresenter(PollutionLevelsFragmentMVP.Model pollutionLevelsModel) {
        return new PollutionLevelsPresenter(pollutionLevelsModel);
    }

    @Provides
    public PollutionLevelsFragmentMVP.Model providePollutionLevelsFragmentModel(Repository repository) {
        return new PollutionLevelsModel(repository);
    }

    @Singleton
    @Provides
    public Repository provideRepo(PollutionApiService pollutionApiService) {
        return new PollutionLevelsRepository(pollutionApiService);
    }
}

存储库

public class PollutionLevelsRepository implements Repository {
    private PollutionApiService pollutionApiService;

    public PollutionLevelsRepository(PollutionApiService pollutionApiService) {
        this.pollutionApiService = pollutionApiService;
    }

    @Override
    public Observable<Aqicn> getDataFromNetwork(String city, String authToken) {
        Observable<Aqicn> aqicn = pollutionApiService.getPollutionObservable(city, authToken);

        return aqicn;
    }
}

1 个答案:

答案 0 :(得分:3)

您必须在活动中使用MVP,以便只对JSON API执行一次请求。之后,从该活动注册的所有片段都可以获得该值。