web-dev-qa-db-ja.com

フラグメンテーションでgetSupportFragmentManager()にアクセスするにはどうすればいいですか?

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);
125
DjP

あなたは直接呼び出すことができます

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();

これで終わりです。

228
Eldhose M Babu

あなたがする必要があるのは使用することだけです

getFragmentManager()

あなたのフラグメントのメソッド。このフラグメントを追加しながらそれを使用したとき、それはあなたにサポートフラグメントマネージャを与えるでしょう。

フラグメントドキュメント

77
Mark

単にそれをこのようにしてください -

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()の後に呼び出されているすべてのメソッドの中。

38
Varundroid

Kotlinのユーザーがこの答えを試す

(activity as AppCompatActivity).supportFragmentManager
12
Ranjith Kumar

あなたがこの問題を抱えていて、APIレベル21+にあるならば、これをしてください:

   map = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map))
                    .getMap();

これはフラグメントの中で使われるとマップを取得します。

9
bsautner

GetSupportFragmentManagerを使用するときはいつでもgetActivity().getSupportFragmentManager()を使用できます。

階層はActivity - > fragmentです。 fragmentはgetSupportFragmentMangerを直接呼び出すことはできませんが、Activityは呼び出すことができます。したがって、フラグメントが含まれている現在のアクティビティを呼び出してgetSupportFragmentManager()を取得するには、getActivityを使用します。

6

私の親アクティビティはAppCompatActivityを拡張しているので、自分のコンテキストをActivityではなくAppCompatActivityにキャストする必要がありました。

例えば。

FragmentAddProduct fragmentAddProduct = FragmentAddProduct.newInstance();
FragmentTransaction fragmentTransaction = ((AppCompatActivity)mcontext).getSupportFragmentManager().beginTransaction();
4

あなたのフラグメントでこれを行います

getActivity().getSupportFragmentManager()
3
philip mudenyo

getActivity().getFragmentManager()これはうまくいったか私です。

こちら もご覧ください。

3
Aravindh Gopi
((AppCompatActivity) getActivity()).getSupportFragmentManager()
2
Diako Hasani

あなただけのようにアクセスすることができます

Context mContext;

public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

mContext = getActivity();

}

そして使用する

FragmentManager fm = ((FragmentActivity) mContext)
                        .getSupportFragmentManager();
1
Ashwini.patil

次のコードは私のためのトリックをします

 SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map));
    mapFragment.getMapAsync(this);
1
olajide

フラグメント内でchildFragmentManagerを使用できます。

0

getSupportFragmentManager()はあなたが活動していてフラグメントを取得したいときに使用しますが、フラグメント内ではアクセスできます。

getSupportFragmentManager()

getFragmentMangaer()と呼ばれる別のメソッドを使用することで、getSupportFragmentManager()と同じように機能し、以前と同じように使用できます。

fragmentTransaction =getFragmentManager().beginTransaction();
0
Mohamed Ayed