0

アプリは最初にアクティビティで作成されましたが、問題が発生したため、代わりに 2 つのフラグメントを使用する必要がありFragmentManagerます。このため、多くのコードをリファクタリングする必要がありました。したがって、私の 2 つのフラグメントはvideoplayerfragmentandvideoRecorderFragmentです。ときどき、videoPlayer 内の動画のリストである JSON を介して取得するリクエストを送信し、動画を作成したい場合はフラグメントを変更します。応答が遅い場合は、要求の OnSuccess を取得して資格情報を保存しようとしますが、フラグメントを置き換えたため、ビデオ プレーヤーのコンテキストは null です。

これは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ここでは、 から任意のメソッドを呼び出すときに が nullであるため、クラッシュしUserCredentialsPersistenceます。

私はまた、呼び出し元からそれを呼び出そうとしFragmentManager: OnSuccessましたrequestNotification:

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

そして、これは:

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

それでも、コンテキストは null です。どうすればこれを乗り越えることができますか?

4

1 に答える 1

1

BaseFragment クラスを作成しました。すべてのフラグメントはこのクラスを拡張します。このクラスには、FragmentNavigator によって実装されるインターフェイスがあります。

次に、FragmentManager から必要な関数をフラグメントから呼び出すだけです。ここに、コンテキストが必要なすべての関数を配置しました。そして、それらからの応答を取得した後、使用している現在のフラグメントにキャストして、それをフラグメントに送り返します。

于 2013-05-08T13:58:03.640 に答える