কনটেক্সট থেকে ফ্র্যাগমেন্ট ম্যানেজার

আমি একটি নতুন দেখুন শ্রেণী তৈরি করেছি সেই ক্লাসের ভিতরে আমি ফ্র্যাগমেন্ট ম্যানেজার তে অ্যাক্সেস পেতে চাই, কিন্তু আমি কিভাবে তা বুঝতে পারি না

আমি কি একটি কনটেক্সট থেকে ফ্র্যাগমেন্ট ম্যানেজার অ্যাক্সেস করতে পারি?

CustomView extends LinearLayout
32
যোগ সম্পাদিত
মতামত: 1

5 উত্তর

শুধুমাত্র প্রদত্ত প্রসঙ্গ যদি ক্রিয়াকলাপ (পোস্ট-মধুভাষী) বা ফ্র্যাগমেন্ট অ্যাক্টিভিটি (প্রাক-মধুচক্র) প্রসারিত করে।

যে ক্ষেত্রে আপনি 100% নিশ্চিত করতে পারেন এটি একটি প্রতিচ্ছবি বা চেষ্টা-ধরা ব্যবহার করে একটি কার্যকলাপ।

try{
  final Activity activity = (Activity) context;

 //Return the fragment manager
  return activity.getFragmentManager();

 //If using the Support lib.
 //return activity.getSupportFragmentManager(); 

} catch (ClassCastException e) {
  Log.d(TAG, "Can't get the fragment manager with this");
}

আমি রিফ্যাক্টরিং সুপারিশ তাই একটি <�কোড> দেখুন </কোড> সত্যিই স্টাফ দেখাচ্ছে জন্য বোঝানো হয় এবং আসলে আপনার অ্যাপ্লিকেশন রাষ্ট্র সংশোধন করা উচিত নয়, কিন্তু যে আমার মতামত

48
যোগ
একটি ডায়ালগফ্রেগমেন্ট প্রশ্নের মধ্যে ভিউ রয়েছে। আমি মূলত একটি DialogFragment আছে যে নির্বাচিত বোতাম উপর ভিত্তি করে বিভাগে বিভক্ত করা হয় আমি উপযুক্ত দেখুন প্রদর্শন। আমি প্রতিটি প্রদর্শনযোগ্য বিভাগের নিজস্ব ভিউতে ভাগ করেছি। আমি একটি ফ্র্যাগমেন্ট ব্যবহার করতাম, কিন্তু আমি একটি টুকরা মধ্যে একটি টুকরা এম্বেড না করতে পারেন।
যোগ লেখক Steve, উৎস
আমি আইডি দ্বারা দৃশ্যটি খুঁজে বের করতে যাচ্ছি, এবং কার্যকলাপের একটি রেফারেন্স পাস।
যোগ লেখক Steve, উৎস
এটা কি করছে তা ডায়ালগফ্র্যাগমেন্ট দর্শনগুলিকে সোয়াপিং করছে যাইহোক, আমি কিছু যুক্তি ধারণকারী মতামত আছে, এবং সম্ভবত ইভেন্ট ব্যবহার করার জন্য প্রতিক্রিয়া অন্যান্য ডায়ালগ টুকরা প্রদর্শন, যাতে মতামত টুকরা ম্যানেজার পেতে একটি উপায় প্রয়োজন। আমি জানি এটা যুক্তি আছে ধারণ করার জন্য সুপারিশ করা হয় না। আমি শুধু বিভাগে বিভক্ত করার একটি ভাল উপায় নিশ্চিত না।
যোগ লেখক Steve, উৎস
কেন শুধু ডায়ালগফ্রাগমেন্ট হ্যান্ডেল দৃশ্য সোয়াপিং নেই? এটা আপনি কি করার চেষ্টা করছেন হিসাবে ঠিক যেমন জটিল হবে বলে মনে হয়।
যোগ লেখক DeeV, উৎস
@ লেইলাবা: ফ্র্যাগমেন্টে একটি "GetFragmentManager ()" এবং "GetChildFragmentManager ()" পদ্ধতি রয়েছে, তাই আমি নিশ্চিত নই যে আপনি কী জিজ্ঞেস করছেন। যারা সম্ভবত একটি ফাংশন যদিও একটি কার্যকলাপ সংযুক্ত করা হয় না হবে (সম্ভবত) নাল ফিরে। আপনি "getActivity() ব্যবহার করতে পারেন। GetFragmentManager ()" FragmentManager হিসাবে ভাল হিসাবে ব্যবহার পেতে।
যোগ লেখক DeeV, উৎস
"যে ক্ষেত্রে আপনি 100% নিশ্চিত করতে পারেন এটি একটি প্রতিচ্ছবি বা চেষ্টা-ধরা ব্যবহার একটি কার্যকলাপ।" অথবা শুধু অপারেটর ব্যবহার করে এমনকি আরও ভাল।
যোগ লেখক Zsolt Safrany, উৎস
যদি এটা ফ্র্যাগমেন্ট পর্যন্ত বিস্তৃত হয়?
যোগ লেখক Lei Leyba, উৎস

যদি আপনি সমর্থন টুকরা ব্যবহার করছেন, আপনি সম্ভবত আসলে চান:

try {
  FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
} catch (ClassCastException e) {
  Log.e(TAG, "Can't get fragment manager");
}
30
যোগ

এই আমার জন্য কাজ কি:

Context mContext;
...


//Get FragmentManager
FragmentManager fragmentManager = ((Activity) mContext).getFragmentManager();

(অবশ্যই আপনি প্রথম সব mContext শুরু আছে)

5
যোগ
কাস্টিং এর এই যুক্তি কি, কিভাবে এটি সম্ভব
যোগ লেখক blackHawk, উৎস

আপনি একটি অ্যাপ্লিকেশন মধ্যে একটি FragmentManager (বা SupportFragmentManager) অ্যাক্সেস পেতে পারেন - কিন্তু হিসাবে অন্যান্য উত্তর প্রস্তাবিত, আপনি শুধুমাত্র একটি কার্যকলাপ উদাহরণের মাধ্যমে এটি করতে পারেন।

যাইহোক, আপনি ActivityLifecycle কলব্যাক ইন্টারফেস ব্যবহার করে যেকোনো ক্রিয়াকলাপ সরাসরি কল করতে প্রয়োজন ছাড়া একটি কার্যকলাপের মাধ্যমে একটি ফ্র্যাগমেন্টম্যানার অ্যাক্সেস পেতে পারেন:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks {

    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {
        activity.getFragmentManager()
        if(activity instanceof FragmentActivity) {
            ((FragmentActivity)activity).getSupportFragmentManager();
        }
        unregisterActivityLifecycleCallbacks(this);
    }

    ...
3
যোগ

যেহেতু আপনার প্রসঙ্গ অবজেক্ট সবসময় কার্যকলাপে সরাসরি নিক্ষিপ্ত হতে পারে না, এটি এটি করার জন্য আরো নির্ভরযোগ্য উপায়:

@Nullable
public static Activity getActivityFromContext(@NonNull Context context){
    while (context instanceof ContextWrapper) {
        if (context instanceof Activity) return (Activity) context;
        context = ((ContextWrapper)context).getBaseContext();
    }
    return null; //we failed miserably 
}
1
যোগ