0

アクティビティに別のフラグメントを添付するアプリケーションがあります。そのアクティビティコンテナで、別のフラグメントを置き換えています。

そのため、アクティビティの開始時に、アクティビティ コンテナー内の MapFragment を置き換えます。後で他のフラグメントを置き換え、メイン アクティビティから再びマップ フラグメントを置き換えます。私はフラグメント内のマップの実装が間違っていると思いますが、知りたいと思っていて、いくつかの異なることをしたかったのですが、フラグメントをよく理解していないと思うので、ヌルポインター例外が発生していると思います

私が今までやってきたこと

ケース1. 私が言ったように、アプリの開始時にマップフラグメントを置き換えていますが、Googleマップv2でユーザーの場所を有効に設定するだけで、ユーザーの現在の場所を表示する以外は何もしていません。マップのボタンをクリックすると、他の場所を表示したり、サーバーから位置情報を取得したり、マップ上にピンを描画したりできます。マップ フラグメントが存在する限り、これはうまく機能しています。

ケース2

ユーザーがボタンをクリックした場合、コンテナに他のフラグメントがあるときに「場所を表示」と言うと、アプリ情報を含むAbout Usフラグメントと言うので、このボタンでは、マップフラグメントを再度置き換えてから、そのフラグメントの関数を置き換える必要があると想定されますサーバーから場所をダウンロードし、それらを地図上に表示するために、ボタンのクリックで呼び出しているときに動作を開始する必要があります

  fragmentTransaction1.replace(R.id.frame, myMapFragment, "MyMapFragment").commit();
                        fragmentManager.executePendingTransactions();
                        myMapFragment.GetAllLocations("friendsLocation");

したがって、この GetLocations() を実行する必要がありますが、この段階でアプリがクラッシュし、null ポインター例外が発生します。この関数 myMapFragment.GetAllLocations("friendsLocation") には、getActivity() として取得するコンテキストが必要です。コンテキストが必要な ION ライブラリを使用して Web API を呼び出す必要があるため、コンテキストが必要です。

これらは私の基本的な質問です

  1. getActivity() で null コンテキストを取得できないように、フラグメントが開始されたことを知るにはどうすればよいですか?

    1. それを行う他の方法はありますか、私の必要性を理解していただければ幸いです。つまり、マップフラグメントを置き換えたいのと同時に、メインアクティビティからフラグメントメソッドにパラメーターを渡すことでフラグメントメソッドを呼び出したいのですが、どうすればできますか?

    2. アイデアは私の頭の中にあり、Mainactivity ボタンを使用してマップ フラグメントを元に戻すときに、mapFragment に静的な値を設定する必要があります。

public static boolean isLocationShouldDownload== flase //マップ フラグメント内

フラグメントの置換中に true に設定し、フラグメントが実行状態になった後にフラグメントが開始されたときに、この変数が true (メイン アクティビティによって設定) であるかどうかをチェックし、ダウンロードしてピンのプロットを開始する必要があります。しかし、フラグメントが実行されていることをどのように知ることができるかわかりません。

ポイント3で述べたアイデアをどこでどのように実装する必要があるのか​​ わかりません。

あなたのアイデアを私と共有し、フラグメントが場所を置き換えてダウンロードし、アプリがクラッシュすることなく地図上に表示する必要がある主なアクティビティを通じて、このタスクをどのように達成できるかについての提案をするか、ソースコードを共有してください。

4

0 に答える 0