मैं एक टुकड़े में getSupportFragmentManager () का उपयोग कैसे कर सकता हूं?


157

मेरे पास एक 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);

जवाबों:


278

आप सीधे कॉल कर सकते हैं

getFragmentManager() 

टुकड़ा प्रबंधक पाने के लिए।

या

आपके टुकड़े में,

फ़ील्ड बनाएँ:

private FragmentActivity myContext;

ओवरराइड onAttach अपने टुकड़े की विधि:

@Override
public void onAttach(Activity activity) {
    myContext=(FragmentActivity) activity;
    super.onAttach(activity);
}

जब आपको समर्थन खंड प्रबंधक कॉल प्राप्त करने की आवश्यकता होती है:

FragmentManager fragManager = myContext.getSupportFragmentManager(); //If using fragments from support v4

या

FragmentManager fragManager = myContext.getFragmentManager();

आप कर चुके हैं।


3
जब मैं पहली बार काम पर क्लिक करता हूं, लेकिन उसके बाद कुछ अन्य टुकड़े पर जा रहा हूं तो मैं इस पर क्लिक करता हूं, यह खाली पृष्ठ दिखाता है ..
DjP

11
यह एक उपरि है। मेरा जवाब नीचे देखें ... getFragmentManager () वास्तव में आप सभी की जरूरत है।
मार्क

4
आपको यहाँ वैश्विक mContext वैरिएबल की आवश्यकता नहीं है, बस अपने कोड में जहाँ भी आपको आवश्यकता हो getActivity () का उपयोग करें। कृपया अपना उत्तर संपादित करें ताकि आप लोगों को गलत दिशा में न भटकाएँ।
वरुंडोयड

3
@Varundroid। मैं इस तथ्य से सहमत हूं कि हम getFragmentManager () को कभी भी कॉल कर सकते हैं। यदि आप मुझे अपना ईमेल आईडी भेज सकते हैं, तो मैं यह साबित करने के लिए यू सैंपल कोड भेज सकता हूं कि शून्य वापसी के लिए गेटअक्टिविटी () के लिए पृथ्वी पर संभावनाएं हैं।
एल्डहोस एम बाबू

1
@ androidplusios.design आपको अपने फ़्रेग्मेंटेशन के अंदर getFragmentManager () और getSupportFragementManager कॉल करने की आवश्यकता है। getFragmentManager () फ्रैगमेंट क्लास का एक इंस्टेंस फंक्शन है और इसलिए यू इसे फ्रैगमेंट के अंदर कह सकते हैं और इसमें फ्रैगमेंट क्लास का वर्तमान इंस्टेंस रेफरेंस लगेगा।
एल्डहोस एम बाबू

83

आपको बस इसका उपयोग करने की आवश्यकता है

getFragmentManager()

आपके टुकड़े पर विधि। जब आप इस खंड को जोड़ते समय इसका उपयोग करते हैं, तो यह आपको समर्थन टुकड़ा प्रबंधक देगा।

टुकड़े का प्रलेखन


8
यह स्वीकृत उत्तर होना चाहिए, यह सलाह नहीं दी जाती है कि पहले उत्तर द्वारा सुझाए गए मूल गतिविधि का संदर्भ रखें।
योएन हरकौट

1
@ मर्क यह एक सही उत्तर है और स्वीकृत उत्तर होना चाहिए।
Varundroid

3
यह android.app लौटेगा। कुछ मामलों में, आपको android.support.app.v4.ragment की आवश्यकता है ताकि यह हर समय काम न करे।
कोडिंगपस

1
इसे कैसे ठीक करें? मुझे लगता है कि मुझे support.app.v4 की जरूरत है। फ़्रीमेंट एक
डेनिस लुकास

5
यह उपयुक्त FragmentManager लौटाएगा। अगर android.support.app.v4.ragment में है, तो यह वही चीज़ लौटाएगा जो गतिविधि में getSupportFragmentManager () विधि के रूप में होगी। कारण इस पद्धति को बस getFragmentManager कहा जाता है () इस मामले में क्योंकि यह अस्पष्ट नहीं है, गतिविधि के मामले में विपरीत है।
ब्लंडेन

44

बस इसे इस तरह मिलता है -

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

आपके Fragment की onActivityCreated () विधि और किसी भी विधि को onActivityCreated () के बाद कहा जा रहा है।


यह वही है जो मैं उपयोग करता हूं, हालांकि मैं एंड्रॉइड विकास के लिए काफी नया हूं और मुझे यकीन नहीं है कि यह चीजें करने का सही तरीका है।
पापीपो

@codecaster आप FragmentManager का उपयोग करके GetFragmentManager () विधि के रूप में भी FragmentManager प्राप्त कर सकते हैं। मैंने अपना उत्तर संपादित कर दिया है।
वरुणोदय

1
मैं यहाँ एक परियोजना है कि अजीब चीजें किया जब तक मैं getFragmentManager () getActivity.getSupportFragmentManager () के लिए स्वैप किया।
पापीपो

हम्म्म अजीब है। अब तक इस तरह के मुद्दे में कभी नहीं भागे, लेकिन उपरोक्त समाधानों में से कोई भी बुरा नहीं है इसलिए आप अपने लिए जो भी काम करते हैं उसका उपयोग कर सकते हैं।
वरुणोदय

2
मैंने सभी तरह से कक्षाओं में गहराई से देखा है। लगता है कि यह सबसे अच्छा समाधान है जो android.support.v4.app.ragment का उपयोग करता है
प्रियधुव

16

कोटलिन उपयोगकर्ता इस उत्तर का प्रयास करते हैं

(activity as AppCompatActivity).supportFragmentManager

3
अच्छी बात है कि आपने इसे यहाँ रखा है, अन्यथा यह मुझे पागल कर देता है Ty
MePo

@ Giedrius Glikas टुकड़े या गतिविधि में काम नहीं कर रहा है?
रंजीथ कुमार

13

अगर आपको यह समस्या है और आपी के स्तर 21+ पर हैं, तो यह करें:

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

यह एक टुकड़ा के अंदर इस्तेमाल किया जब नक्शा मिल जाएगा।


1
मैंने ऊपर दिए गए सभी सुझाए गए कोड फिक्स की कोशिश की, लेकिन उनमें से कोई भी काम नहीं कर सका। getChildFragmentManager () ने किया ट्रिक! धन्यवाद।
जॉन वार्ड

कैसे 21 के नीचे एपीआई स्तर के बारे में? उदाहरण के लिए Api स्तर 19?
एलिटोन ओलिवेरा

6

आप getActivity().getSupportFragmentManager()किसी भी समय आप का उपयोग कर सकते हैं आप को प्राप्त करना चाहते हैं।

पदानुक्रम गतिविधि है -> टुकड़ा। टुकड़ा सीधे getSupportFragmentManger कॉल करने में सक्षम नहीं है, लेकिन गतिविधि कर सकते हैं। इस प्रकार, आप वर्तमान गतिविधि को कॉल करने के लिए getActivity का उपयोग कर सकते हैं जो टुकड़ा में है और मिलता हैgetSupportFragmentManager()


5

मेरी पैरेंट एक्टिविटी AppCompatActivity को बढ़ाती है, इसलिए मुझे सिर्फ एक्टिविटी के बजाय AppCompatActivity के संदर्भ में अपनी बात मनानी थी।

जैसे।

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

1
((AppCompatActivity) mContext)भाग वास्तव में मैं क्या देख रहा था। धन्यवाद!
शोले




3

जावा में आप के साथ बदल सकते हैं

getChildFragmentManager()

कोटलिन में, इसे सरल बनाएं

childFragmentManager

उम्मीद है कि यह मदद :)


2

निम्नलिखित कोड मेरे लिए चाल करता है

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


1

आप जैसे चाहें पहुंच सकते हैं

Context mContext;

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

mContext = getActivity();

}

और फिर उपयोग करें

FragmentManager fm = ((FragmentActivity) mContext)
                        .getSupportFragmentManager();

1

एक खंड के अंदर supportFragmentManager का उपयोग करने के लिए कुछ कोटलिन कोड।

  override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?

  ): View? {

    super.onCreateView(inflater, container, savedInstanceState)
    val rootView = inflater.inflate(R.layout.fragment_home, container, false)

    // ....

    if (rootView.home_play_btn != null) {

      rootView.home_play_btn.setOnClickListener {
        val fragment: BaseFragment = ListFragment.newInstance()
        val fragManager: FragmentManager = (activity as AppCompatActivity).supportFragmentManager
        fragManager.beginTransaction()
            .replace(R.id.content_home_frame, fragment, TAG).commit()

      }

0

getSupportFragmentManager() जब आप गतिविधि में होते हैं और एक टुकड़ा प्राप्त करना चाहते हैं, लेकिन उस टुकड़े में जिसका आप उपयोग कर सकते हैं

getSupportFragmentManager()

एक अन्य विधि का उपयोग करके getFragmentMangaer(), जैसा काम करता है वैसा ही getSupportFragmentManager()उपयोग किया जाता है और आप इसका उपयोग कर सकते हैं जैसे कि आप उपयोग करते हैं:

fragmentTransaction =getFragmentManager().beginTransaction();

0

कोटलिन में करने का सरल नया तरीका

requireActivity().supportFragmentManager

-1

इसे इस्तेमाल करे:

private SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());

आपकी आवश्यकता क्या है, मुझे लगता है कि आपकी आवश्यकता टुकड़े के अंदर टुकड़े की मदद से एक पेजर के अंदर एक पेजर को परिभाषित करने के लिए है ..! यानी आपको एक स्वाइप करने योग्य लेआउट के अंदर एक लेआउट को स्वाइप करने की आवश्यकता है?
मैडी

1
कारण @VJ ने आपसे अपने उत्तर का विस्तार करने के लिए कहा क्योंकि कोड की एक पंक्ति एक अच्छी गुणवत्ता का उत्तर नहीं है। प्रश्न के मूल पूछने वाले के अलावा कई लोग आपके उत्तर को देखेंगे और अपनी समस्या को हल करने के लिए इसका उपयोग करना चाह सकते हैं। यह उन उपयोगकर्ताओं के लिए उपयोगी होगा यदि आपने वास्तव में समझाया था कि मूल समस्या क्या थी, यह काम क्यों नहीं किया गया, और आप समाधान क्यों काम नहीं करते।
Psubsee2003
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.