0

Googleマップv2、ロケーションサービス、およびいくつかのコントロールボタンを備えたAndroidアプリを開発しようとしています.

これらすべてを 1 つの MainActivity クラス内に配置したくないので、すべてのコードをさらにいくつかのクラスに分割できると考えました。MainActivity はすべての GUI を制御し、マップまたはロケーション イベントに反応します。

今、私は次の問題を抱えています。onCreate 内で、追加のクラスをインスタンス化します。

// Preferences as singleton
pref = Prefs.getInstance(this.getApplicationContext());
pref.loadSettings();

// Set up the location
loc  = new Locations(pref);
loc.setCallback(this);

map = new MyMap(pref);

それはうまくいくようです。しかし、アプリを起動するたびに MyMap クラス内で null ポインター例外がスローされます。その理由と予防方法がわかりません。MyMap() を呼び出すと、次のコードが実行されます。

[...]
private Prefs pref;
private GoogleMap mMap;
[...]

public MyMap(Prefs prefs) {
    pref = (Prefs) prefs;
    if (mMap == null) {
      FragmentManager fmanager = getSupportFragmentManager(); 
      mMap = ((SupportMapFragment) fmanager.findFragmentById(R.id.map)).getMap();
[...]
}

findFragmentById のある行が例外の原因です。フラグメント マネージャーが MainActivity 内にロードされたレイアウトにアクセスできないことが原因だと思います。しかし、MainActivity 内で定義されたフラグメントとビュー要素にアクセスするにはどうすればよいでしょうか?

すべてのクラスには次のヘッドがあります。

public class XYZ extends android.support.v4.app.FragmentActivity implements XXX, YYY

Prefs() クラス内にアプリケーション コンテキストを保存しようとしました。しかし、追加のクラス内でそれを使用する方法がわかりません。:(

誰か助けてくれませんか?

どうもありがとうございました!!!

トルステン

4

1 に答える 1

0

MyMap のコンストラクター メソッドの引数として mainActivity.getContext() (getApplicationContext() ではない) を渡し、コンストラクター内でその値を type attribute に設定してみてください。次に、そのコンテキストを使用します: context.findViewById(...) または context.getText(...)

幸運を!

于 2013-03-02T01:27:47.763 に答える