💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ Reza Tavassoli
getSupportFragmentManager VS. getFragmentManager().
پوریا شفیعی حل شده توسط پوریا شفیعی

با سلام 

تو قسمتی که می‌خواییم از فرگمنت a به فرگمنت b بریم، داخل متد onClick دکمه چرا نمی‌شود از getSupportFragmentManager استفاده کرد و باید  از getFragmentManager استفاده کرد ؟  در حالی که در جاهای دیگه از getSupportFragmentManager استفاده کردیم.

وقتی از getSupportFragmentManager استفاده می‌کنیم خطا میده. 

public void onClick(View view) {
    //FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); //ERROR
    FragmentTransaction goToBTransaction = getFragmentManager().beginTransaction();
            goToBTransaction.replace(R.id.my_main_fragment,new FragmentB()).commit();
}

سلام رضا عزیز 

نکته اول : اگر از اکتیویتی بخوایم به فرگمنت بریم باید از getSupportFragmentManager استفاده کنیم 

نکته دوم : اگر بخواهیم از فرگمنت به فرگمنت دیگر برویم میتوانیم از این دو روش استفاده کنیم 

روش اول:.getActivity

()getSupportFragmentManager

روش دوم : 

getFragmentManager

نکته سوم : اگر بخواهیم در فرگمنت مورد نظر فرگمنت دیگری لود کنیم باید از  متد getChildFragmentManager استفاده کنیم . 

 

بهترین پاسخ
پوریا شفیعی ۱۲ فروردین ۱۳۹۹، ۲۱:۴۲

سلام.

میتونید از getSupport هم داخل فرگمنت استفاده کنید، به این روش:

getActivity().getSupportFragmentManager().beginTransaction();

چون این متد داخل کلاس FragmentActivity هست و AppCompatActivity از این کلاس مشتق شده است.

 

اما بررسی من از تفاوت این دو متد اینجوریه:

یه متد getFragmentManager داخل اکیتویتی بوده که deprecate شده و متد getSupportFragmentManager در پکیج جایگزین شده و استفاده میکنیم.

 

یه متد getFragmentManager داخل Fragment بهش دسترسی داریم. با قبلی فرق میکنه، چون این متد مال کلاس Fragment هست. این متد FragmentManager رو برمیگردونه.(مثل getSupportFragmentManager)

این متد فقط زمان ساخت آبجکتی ازین کلاس، یعنی زمان ایجاد فرگمنت بهش دسترسی هست.

 

نتیجه:

بنابراین اگر داخل اکیتیویتی خواستیم به FragmentManager دسترسی پیدا کنیم از متد getSupportFragmentManager استفاده میکنیم و اگر داخل یک فرگمنت بودیم، از هر دو متد میتونیم استفاده کنیم.

محسن موحد ۱۲ فروردین ۱۳۹۹، ۲۱:۴۳