Я не могу получить supportfragment в домашнем фрагменте?

#android #android-fragments #android-tablayout

#Android #android-фрагменты #android-таблица

Вопрос:

я создаю домашний фрагмент, а внутри я создаю макет вкладки и использую класс java и расширяю fragmentPagerAdapter его, когда я хочу инициализировать TabAdapter в домашнем фрагменте getSupportFragmentManager , и я не могу установить это во фрагменте (домашний фрагмент), что я могу сделать, чтобы это исправить?

мои коды TabAdapter :

 import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

public class TabAdapter extends FragmentPagerAdapter {

private int numberOfTabs;

public TabAdapter(FragmentManager fm, int behavior) {
    super(fm);
    this.numberOfTabs = behavior;
}

@NonNull
@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return new MobileCatFragment();

        case 1:
            return new TabletCatFragment();

        case 2:
            return new LaptopCatFragment();

        default:
            return null;
    }
}

@Override
public int getCount() {
    return numberOfTabs;
}
}
 

и мой домашний фрагмент, когда я пытаюсь инициализировать TabAdapter :

 TabAdapter tabAdapter = new TabAdapter( ???  , tlCategory.getTabCount());
 

tlCategory — это моя таблица…

Обновить:

это мои коды домашнего фрагмента :

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home,container,false);
    progressDialog = new ProgressDialog(getContext());
    sessionManager = new SessionManager(getContext());
    TabAdapter tabAdapter = new TabAdapter(getChildFragmentManager()  , tlCategory.getTabCount());

    imgBtnSearch = view.findViewById(R.id.imgBtnSearch);
    imgBtnSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchDialog();
        }
    });

    svBanner = view.findViewById(R.id.svBanner);
    svBanner.setAutoCycle(true);
    svBanner.setScrollTimeInSec(8);
    svBanner.setIndicatorAnimation(IndicatorAnimationType.WORM);
    showBanner();

    tlCategory = view.findViewById(R.id.tlCategory);
    tiMobile = view.findViewById(R.id.tiMobile);
    tiTablet = view.findViewById(R.id.tiTablet);
    tiLaptop = view.findViewById(R.id.tiLaptop);
    vpTabs = vpTabs.findViewById(R.id.vpTabs);
    vpTabs.setAdapter(tabAdapter);
    tlCategory.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            vpTabs.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    return view;
}
 

Ответ №1:

вам нужно использовать getFragmentManager()

Ответ №2:

если вы вызываете TabAdapter из фрагмента, пожалуйста, используйте TabAdapter tabAdapter = new TabAdapter( getChildFragmentManager(), tlCategory.getTabCount());

и вызываете ли вы TabAdapter из AppCompatActivity / Activity use TabAdapter tabAdapter = new TabAdapter( getSupportFragmentManager(), tlCategory.getTabCount());

Комментарии:

1. @mohammadmansouri пожалуйста, загрузите код домашней фрагментации

Ответ №3:

Это должен быть ChildFragmentManager, потому что вы не можете вызвать getSupportFragmentManger() со ссылкой на фрагмент

 TabAdapter tabAdapter = new TabAdapter( getChildFragmentManager()  , tlCategory.getTabCount());
 

или у вас есть вызов со ссылкой на активность

 requirActivity().getSupportFragmentManager()