0

该应用程序最初是使用活动制作的,但由于一个问题,我必须使用 2 个片段FragmentManager来代替。现在,正因为如此,我不得不重构很多代码。所以我的 2 个片段是videoplayerfragmentand videoRecorderFragment。有时我发送一个请求以通过 JSON 获取 videoPlayer 中的视频列表,如果我想制作视频,我会更改片段。现在如果响应迟了,我会得到请求的 OnSuccess,试图保存凭证,但是视频播放器的上下文为空,因为我已经替换了片段。

这是UserCredentialsPersistence课程的一部分:

 private static SharedPreferences obtainSharedPreferences(Context context) {
    return context.getSharedPreferences(USER_CREDENTIALS_KEY,
            Context.MODE_PRIVATE);
}

 public static boolean saveToDownloadCount(Context context,
        int download_count) {

    Editor e = context.getSharedPreferences(USER_CREDENTIALS_KEY,
            Context.MODE_PRIVATE).edit();

    e.putInt(USER_TO_DL_COUNT_KEY, download_count);
    return e.commit();
}

这是 的重要部分VideoPlayerFragment

    videoRequest.requestNotification = new RequestNotification() {

        @Override
        public void onSuccess(Object sender) {
            Log.d("@VideoPlayerActivity", "success");
            playHideUpAnimation();
            new_videos = new ArrayList<VideoData>(VideoDataManager.getInstance().getNewVideos());           
UserCredentialsPersistence.saveToDownloadCount(getActivity(), UserCredentialsPersistence.restoreToDownloadCount(getActivity()) + new_videos.size());
            all_videos = videodb.getTotalVideoListFromDB();

在这里它崩溃,因为getActivity从调用任何方法时UserCredentialsPersistence.

我也尝试从FragmentManager: OnSuccessat the call 中调用它requestNotification

((VideoHolderActivity) getActivity()).saveToDLCount(new_videos.size());

这是:

 public void saveToDLCount(Integer size){
    UserCredentialsPersistence.saveToDownloadCount(VideoHolderActivity.this, UserCredentialsPersistence.restoreToDownloadCount(VideoHolderActivity.this) + size);
}

但是,上下文仍然为空。知道我怎么能克服这个吗?

4

1 回答 1

1

我创建了一个 BaseFragment 类。我所有的片段都扩展了这个类。在这个类中,我有一个接口,由我的 FragmentNavigator 实现。

然后我只需从 FragmentManager 中调用我需要的功能。在这里,我放置了所有需要上下文的函数。在得到他们的响应后,我通过对我使用的当前片段进行强制转换,将其发送回片段。

于 2013-05-08T13:58:03.640 回答