FragmentActivityがあり、その中にマップフラグメントを使用したいです。サポートフラグメントマネージャからアクセスするのに問題があります。
if (googleMap == null) {
googleMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map1)).getMap();
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
// create marker
MarkerOptions marker = new MarkerOptions().position(
new LatLng(latitude, longitude)).title("Hello Maps ");
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude)).zoom(15).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition));
// adding marker
googleMap.addMarker(marker);
あなたは直接呼び出すことができます
getFragmentManager()
フラグメントマネージャを取得します。
または
あなたの断片では、
フィールドを作成します。
private FragmentActivity myContext;
フラグメントのonAttachメソッドをオーバーライドします。
@Override
public void onAttach(Activity activity) {
myContext=(FragmentActivity) activity;
super.onAttach(activity);
}
Support fragment managerを呼び出す必要がある場合
FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4
または
FragmentManager fragManager = myContext.getFragmentManager();
これで終わりです。
あなたがする必要があるのは使用することだけです
getFragmentManager()
あなたのフラグメントのメソッド。このフラグメントを追加しながらそれを使用したとき、それはあなたにサポートフラグメントマネージャを与えるでしょう。
単にそれをこのようにしてください -
getFragmentManager() // This will also give you the SupportFragmentManager or FragmentManager based on which Fragment class you have extended - Android.support.v4.app.Fragment OR Android.app.Fragment.
または
getActivity().getSupportFragmentManager();
あなたのフラグメントのonActivityCreated()メソッドとonActivityCreated()の後に呼び出されているすべてのメソッドの中。
Kotlinのユーザーがこの答えを試す
(activity as AppCompatActivity).supportFragmentManager
あなたがこの問題を抱えていて、APIレベル21+にあるならば、これをしてください:
map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
.getMap();
これはフラグメントの中で使われるとマップを取得します。
GetSupportFragmentManagerを使用するときはいつでもgetActivity().getSupportFragmentManager()
を使用できます。
階層はActivity - > fragmentです。 fragmentはgetSupportFragmentMangerを直接呼び出すことはできませんが、Activityは呼び出すことができます。したがって、フラグメントが含まれている現在のアクティビティを呼び出してgetSupportFragmentManager()
を取得するには、getActivityを使用します。
私の親アクティビティはAppCompatActivityを拡張しているので、自分のコンテキストをActivityではなくAppCompatActivityにキャストする必要がありました。
例えば。
FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
あなたのフラグメントでこれを行います
getActivity().getSupportFragmentManager()
getActivity().getFragmentManager()
これはうまくいったか私です。
こちら もご覧ください。
((AppCompatActivity) getActivity()).getSupportFragmentManager()
あなただけのようにアクセスすることができます
Context mContext;
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
}
そして使用する
FragmentManager fm = ((FragmentActivity) mContext)
.getSupportFragmentManager();
次のコードは私のためのトリックをします
SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
フラグメント内でchildFragmentManagerを使用できます。
getSupportFragmentManager()
はあなたが活動していてフラグメントを取得したいときに使用しますが、フラグメント内ではアクセスできます。
getSupportFragmentManager()
getFragmentMangaer()
と呼ばれる別のメソッドを使用することで、getSupportFragmentManager()
と同じように機能し、以前と同じように使用できます。
fragmentTransaction =getFragmentManager().beginTransaction();