【问题标题】:Cannot resolve method super() error in fragmentmanager Android无法解决 FragmentManager Android 中的方法 super() 错误
【发布时间】:2020-08-30 15:37:04
【问题描述】:

我不是 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;
        }
    }
}

【问题讨论】:

    标签: java android constructor super android-fragment-manager


    【解决方案1】:

    在构造函数中使用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);
        }
    

    【讨论】:

    • 请原谅迟到的回复,但我使用“FragmentStateAdapter(FragmentManager fragmentManager, Lifecycle lifecycle)”解决了它,并为生命周期添加了一个空参数:“AuthenticationPagerAdapter pagerAdapter = new AuthenticationPagerAdapter(getSupportFragmentManager(), null); " Gradle 成功构建但不断崩溃。我想我不能为生命周期事件提供 null
    【解决方案2】:

    我认为将super() 用于fragmentActivity 参数是不可能的。您应该从较高位置的构造函数向super() 方法发送一个值。顺便说一句,我看不到 MainActivity 类的构造函数。您希望从哪个类中获取值?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2016-01-09
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多