আমি কীভাবে কোনও খণ্ডে getSupportFraamentManager () অ্যাক্সেস করতে পারি?


157

আমার একটি ফ্র্যাগমেন্টএটিভিটি রয়েছে এবং আমি এর মধ্যে একটি মানচিত্রের টুকরোটি ব্যবহার করতে চাই। সমর্থন খণ্ডটি পরিচালক এটি অ্যাক্সেস করতে আমার একটি সমস্যা হচ্ছে।

 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;

আপনার খণ্ডের অ্যাটাক পদ্ধতিতে ওভাররাইড করুন:

@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
আমি যখন প্রথমবার ক্লিক করি তখন এটি কাজ করে তবে এর পরে আবার অন্য কিছু খণ্ড
খোলার

11
এটি একটি ওভারহেড। নীচে আমার উত্তরটি দেখুন ... getFraamentManager () আপনার যা প্রয়োজন তা হ'ল।
চিহ্নিত করুন

4
আপনার এখানে গ্লোবাল এমকন্টেক্সট ভেরিয়েবলের দরকার নেই, আপনার কোডে যেখানেই প্রয়োজন সেখানেই getActivity () ব্যবহার করুন। দয়া করে আপনার উত্তরটি সম্পাদনা করুন যাতে আপনি লোককে ভুল দিকভ্রান্ত না করেন।
বরুণড্রয়েড

3
@Varundroid। আমি এই বিষয়ে একমত যে আমরা যে কোনও সময় getFramentManager () কে কল করতে পারি। আপনি যদি আমাকে আপনার ইমেল আইডি প্রেরণ করতে পারেন তবে আমি আপনার নমুনা কোডটি প্রেরণ করতে পারি যে পৃথিবীতে getActivity () নਾਲ ফিরে আসার সম্ভাবনা রয়েছে।
এল্ডহোজ এম বাবু

1
@ androidplusios.design আপনাকে আপনার খণ্ডের ভিতরে getFraamentManager () কল করতে হবে এবং getSupportFragementManager নয়। গেটফ্রেগমেন্টম্যানেজার () হ'ল ফ্রেগমেন্ট ক্লাসের একটি উদাহরণ ফাংশন এবং তাই আপনি এটিকে কোনও খণ্ডের মধ্যে কল করতে পারেন এবং এতে ফ্রেগমেন্ট শ্রেণীর বর্তমান উদাহরণ উল্লেখ রয়েছে।
এল্ডহোজ এম বাবু

83

আপনাকে যা করতে হবে তা হ'ল ব্যবহার করা

getFragmentManager()

আপনার টুকরা পদ্ধতি। আপনি যখন এই খণ্ডটি যুক্ত করার সময় এটি ব্যবহার করেছিলেন তখন এটি আপনাকে সমর্থন খণ্ড খণ্ডককে সহায়তা দেবে।

খণ্ড ডকুমেন্টেশন


8
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, প্রথম উত্তরের পরামর্শ অনুসারে পিতামাতার ক্রিয়াকলাপের কোনও রেফারেন্স রাখার পরামর্শ দেওয়া হয় না।
ইয়োন হারকিউট

1
@ মার্ক এটি একটি নিখুঁত উত্তর এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
বরুণড্রয়েড

3
এটি android.app.Frament ফিরবে gment কিছু ক্ষেত্রে, আপনার android.support.app.v4.Fraament প্রয়োজন তাই এটি সর্বদা কাজ করে না।
কোডিংপাস

1
কিভাবে এটি ঠিক করবেন? আমি মনে করি আমার
ডেনিস লুকাস

5
এটি উপযুক্ত ফ্র্যাগমেন্টম্যানেজারটি ফিরিয়ে দেবে। যদি একটি android.support.app.v4.Fraament এ থাকে তবে এটি কার্যকলাপের getSupportFraamentManager () পদ্ধতি হিসাবে একই জিনিসটি ফিরিয়ে দেবে। এই ক্ষেত্রে পদ্ধতিটিকে কেবল getFramentManager () বলা হওয়ার কারণ এটি কার্যকলাপের ক্ষেত্রে অস্পষ্ট নয়, বিপরীতে।
blunden

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

আপনার খণ্ডের onActivityCreated () পদ্ধতি এবং যে কোনও পদ্ধতি যা onActivityCreated () এর পরে ডাকা হচ্ছে in


এটি আমি ব্যবহার করি, যদিও আমি অ্যান্ড্রয়েড বিকাশে বেশ নতুন এবং আমি নিশ্চিত যে এটি কাজ করার সঠিক উপায় কিনা not
পাপ্পি

@ কোডেকাস্টার আপনি ফ্র্যাগমেন্টম্যানেজারটি ফ্রেমমেন্ট ম্যানেজার () ফ্রেগমেন্টের নিজেই পদ্ধতি ব্যবহার করে পেতে পারেন। আমি আমার উত্তর সম্পাদনা করেছি।
বরুণড্রয়েড

1
আমার এখানে একটি প্রকল্প রয়েছে যা আমি getActivity.getSupportFragmentManager () এর জন্য getFramentManager () অদলবদ না করা অবধি অদ্ভুত কাজ করে।
পাপিপো

হুমমম আজব। এতদূর কখনও এ জাতীয় কোনও সমস্যায় পড়েনি তবে উপরের সমাধানগুলির কোনওটিই খারাপ নয় যাতে আপনি আপনার জন্য যা কিছু কাজ করে তা ব্যবহার করতে পারেন।
বরুণড্রয়েড

2
আমি সমস্ত দিক থেকে ক্লাসে গভীরভাবে তাকিয়েছি। দেখে মনে হচ্ছে এটিই সেরা সমাধান যিনি android.support.v4.app.Fraament ব্যবহার করেন
ডিয়ারড্রুভ

16

কোটলিন ব্যবহারকারীরা এই উত্তরটি ব্যবহার করে দেখুন

(activity as AppCompatActivity).supportFragmentManager

3
ভাল জিনিস আপনি এটি এখানে রেখেছেন, অন্যথায় এটি আমাকে পাগল করে
তুলবে

@ GiedriusŠlikas টুকরা বা ক্রিয়াকলাপে কাজ করছেন না?
রণজিৎ কুমার

13

আপনার যদি সমস্যা হয় এবং এপিআই স্তরের 21++ এ থাকে:

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

এটি কোনও খণ্ডের অভ্যন্তরে ব্যবহৃত হলে মানচিত্রটি পাবেন।


1
আমি উপরে প্রস্তাবিত সমস্ত কোড সংশোধন করার চেষ্টা করেছি, কিন্তু সেগুলির কোনওটিতেই কাজ করতে পারা যায় না। getChildFraamentManager () কৌতুকটি করলেন! ধন্যবাদ.
জন ওয়ার্ড

21 এর নীচে এপিআই স্তর সম্পর্কে কীভাবে? উদাহরণস্বরূপ এপিআই লেভেল ১৯?
অ্যালিটন অলিভিরা

6

তুমি ব্যবহার করতে পার getActivity().getSupportFragmentManager() সাপোর্টফ্র্যাগমেন্টম্যানেজারটি পেতে যে কোনও সময় ।

শ্রেণিবদ্ধ হ'ল ক্রিয়াকলাপ -> খণ্ড। খণ্ডটি getSupportFragmentManger সরাসরি কল করতে সক্ষম নয় তবে ক্রিয়াকলাপ করতে পারে। সুতরাং, আপনি বর্তমান ক্রিয়াকলাপটি কল করতে যেটি খণ্ডটি রয়েছে তা কল করতে getActivity ব্যবহার করতে পারেন getgetSupportFragmentManager()


5

আমার মূল ক্রিয়াকলাপ অ্যাপকম্প্যাটঅ্যাক্টিভিটি প্রসারিত করে তাই আমাকে কেবলমাত্র ক্রিয়াকলাপের পরিবর্তে আমার প্রসঙ্গটি অ্যাপকম্প্যাটঅ্যাক্টিভিটিতে কাস্ট করতে হয়েছিল।

যেমন।

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

1
((AppCompatActivity) mContext)অংশটি হুবহু আমি যা খুঁজছিলাম was ধন্যবাদ!
17:38 এ শৈল :




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

কোনও খণ্ডের মধ্যে সমর্থনফ্রেগমেন্টম্যানেজারটি ব্যবহার করতে কিছু কোটলিন কোড।

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

আপনার প্রয়োজনীয়তা কী, আমি মনে করি আপনার প্রয়োজনটি টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো সাহায্যের সাহায্যে অন্য পেজারের ভিতরে একটি পেজার সংজ্ঞায়িত করা ..! অর্থাত্ আপনার একটি swippable লেআউট ভিতরে একটি লেআউট সোয়াইপ করা প্রয়োজন?
ম্যাডি

1
@ ভিজে আপনাকে উত্তর উত্তর প্রসারণ করতে বলেছে কারণ কোডের একটি লাইন একটি ভাল মানের উত্তর নয়। প্রশ্নের মূল প্রশ্নকর্তা ব্যতীত আরও অনেকে আপনার উত্তর দেখতে পাবেন এবং নিজের সমস্যা সমাধানের জন্য এটি ব্যবহার করতে চাইতে পারেন। এই ব্যবহারকারীদের পক্ষে সহায়ক হবে যদি আপনি প্রকৃত সমস্যাটি প্রশ্নটির মূল সমস্যাটি কী ছিল, কেন এটি কাজ করে না, এবং কেন আপনি সমাধানটি কাজ করে তা ব্যাখ্যা করে।
psubsee2003
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.