Не удается устранить ошибку метода super() в Fragmentmanager Android

Я не программист на Java, но пытаюсь создать приложение, попутно пытаясь изучить Java. Я пытаюсь добавить 2 фрагмента, один - это фрагмент входа в систему, а другой - фрагмент регистра, но при использовании суперконструктора, с которым я столкнулся, не удается устранить ошибку. Может ли кто-нибудь подсказать, что я делаю не так?

Я понимаю, что super используется для доступа к конструктору родительского класса, который в моем случае не пуст.

Ниже приведен код MainActivity:

public class MainActivity extends FragmentActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewPager2 viewPager = findViewById(R.id.viewPager);

        AuthenticationPagerAdapter pagerAdapter = new AuthenticationPagerAdapter(getSupportFragmentManager());
        pagerAdapter.addFragment(new fragment_login());
        pagerAdapter.addFragment(new fragment_register());
        viewPager.setAdapter(pagerAdapter);
    }

    public static class AuthenticationPagerAdapter extends FragmentStateAdapter
    {
        private ArrayList<Fragment> fragmentList = new ArrayList<>();

        public AuthenticationPagerAdapter(FragmentManager fragmentActivity)
        {
            super(fragmentActivity);
        }

        public Fragment getItem(int i)
        {
            return fragmentList.get(i);
        }

        public int getCount()
        {
            return fragmentList.size();
        }

        void addFragment(Fragment fragment) {
            fragmentList.add(fragment);
        }

        @NonNull
        @Override
        public Fragment createFragment(int position)
        {
            return null;
        }

        @Override
        public int getItemCount()
        {
            return 0;
        }
    }
}

2 ответа

Я думаю невозможно использовать super() за fragmentActivityпараметр. Вы должны отправить значения вsuper()метод из расположенного выше конструктора. Кстати, я не вижу конструктора дляMainActivityучебный класс. Из какого класса вы хотите получить значения?

Используя super() в конструкторе вы пытаетесь вызвать конструктор родительского класса.

В этом случае FragmentStateAdapter имеет 3 конструктора:

FragmentStateAdapter(FragmentActivity fragmentActivity)
FragmentStateAdapter(Fragment fragment)
FragmentStateAdapter(FragmentManager fragmentManager, Lifecycle lifecycle)

В вашем случае у вас есть:

public AuthenticationPagerAdapter(FragmentManager fragmentActivity)

а также super(FragmentManager); не соответствует ни одному супер конструктору.

Вы можете использовать что-то вроде:

public AuthenticationPagerAdapter(FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

public AuthenticationPagerAdapter(FragmentManager fragmentManager,Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
Другие вопросы по тегам