Ich bin kein Java-Programmierer, sondern versuche, eine App zu erstellen, während ich versuche, Java zu lernen. Ich versuche 2 Fragmente hinzuzufügen, eines ist das Anmeldefragment und eines ist das Registerfragment, aber während ich den Superkonstruktor verwende, kann ich den Fehler nicht beheben. Könnte jemand vorschlagen, was ich falsch mache?

Ich verstehe, dass Super für den Zugriff auf den übergeordneten Klassenkonstruktor verwendet wird, der in meinem Fall nicht leer ist.

Es folgt der MainActivity-Code:

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;
        }
    }
}
1
Novneet Patnaik 30 Aug. 2020 im 18:37

2 Antworten

Beste Antwort

Mit super() in einem Konstruktor versuchen Sie, den Konstruktor der übergeordneten Klasse aufzurufen.

In diesem Fall hat der FragmentStateAdapter 3 Konstruktoren:

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

In Ihrem Fall haben Sie:

public AuthenticationPagerAdapter(FragmentManager fragmentActivity)

Und super(FragmentManager); stimmt nicht mit einem Superkonstruktor überein.

Sie können Folgendes verwenden:

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

public AuthenticationPagerAdapter(FragmentManager fragmentManager,Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
0
Gabriele Mariotti 30 Aug. 2020 im 18:35

Ich denke, es ist unmöglich, super() für fragmentActivity Parameter zu verwenden. Sie sollten Werte von einem höher gelegenen Konstruktor an die super() -Methode senden. Ich kann übrigens keinen Konstruktor für die Klasse MainActivity sehen. Von welcher Klasse möchten Sie Werte erhalten?

0
Kris 30 Aug. 2020 im 15:49