无法解决在FragmentManager中的super()方法错误。

huangapple go评论101阅读模式
英文:

Cannot resolve method super() error in fragmentmanager Android

问题

我不是Java程序员,但我在尝试构建一个应用程序的同时也在学习Java编程。我试图添加两个片段,一个是登录片段,另一个是注册片段,但在使用超类构造函数时,我遇到了"cannot resolve"错误。有人能指出我做错了什么吗?

我知道"super"用于访问父类构造函数,而在我的情况下父类构造函数不是空的。

以下是MainActivity的代码:

  1. public class MainActivity extends FragmentActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. ViewPager2 viewPager = findViewById(R.id.viewPager);
  7. AuthenticationPagerAdapter pagerAdapter = new AuthenticationPagerAdapter(getSupportFragmentManager());
  8. pagerAdapter.addFragment(new fragment_login());
  9. pagerAdapter.addFragment(new fragment_register());
  10. viewPager.setAdapter(pagerAdapter);
  11. }
  12. public static class AuthenticationPagerAdapter extends FragmentStateAdapter {
  13. private ArrayList<Fragment> fragmentList = new ArrayList<>();
  14. public AuthenticationPagerAdapter(FragmentManager fragmentActivity) {
  15. super(fragmentActivity);
  16. }
  17. public Fragment getItem(int i) {
  18. return fragmentList.get(i);
  19. }
  20. public int getCount() {
  21. return fragmentList.size();
  22. }
  23. void addFragment(Fragment fragment) {
  24. fragmentList.add(fragment);
  25. }
  26. @NonNull
  27. @Override
  28. public Fragment createFragment(int position) {
  29. return null;
  30. }
  31. @Override
  32. public int getItemCount() {
  33. return 0;
  34. }
  35. }
  36. }
英文:

I am not a Java coder but trying to build an app while trying to learn Java along the way.
I am trying to add 2 fragments one is the login fragment and one is the register fragment but while using super constructor I am facing cannot resolve error.
Could anyone suggest what I am doing wrong?

I get that super is used for accessing the parent class constructor which in my case is not empty.

Following is the MainActivity code:

  1. public class MainActivity extends FragmentActivity
  2. {
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState)
  5. {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. ViewPager2 viewPager = findViewById(R.id.viewPager);
  9. AuthenticationPagerAdapter pagerAdapter = new AuthenticationPagerAdapter(getSupportFragmentManager());
  10. pagerAdapter.addFragment(new fragment_login());
  11. pagerAdapter.addFragment(new fragment_register());
  12. viewPager.setAdapter(pagerAdapter);
  13. }
  14. public static class AuthenticationPagerAdapter extends FragmentStateAdapter
  15. {
  16. private ArrayList&lt;Fragment&gt; fragmentList = new ArrayList&lt;&gt;();
  17. public AuthenticationPagerAdapter(FragmentManager fragmentActivity)
  18. {
  19. super(fragmentActivity);
  20. }
  21. public Fragment getItem(int i)
  22. {
  23. return fragmentList.get(i);
  24. }
  25. public int getCount()
  26. {
  27. return fragmentList.size();
  28. }
  29. void addFragment(Fragment fragment) {
  30. fragmentList.add(fragment);
  31. }
  32. @NonNull
  33. @Override
  34. public Fragment createFragment(int position)
  35. {
  36. return null;
  37. }
  38. @Override
  39. public int getItemCount()
  40. {
  41. return 0;
  42. }
  43. }
  44. }

答案1

得分: 0

我认为对于 fragmentActivity 参数,使用 super() 是不可能的。您应该从更高级的构造函数向 super() 方法发送一个值。顺便说一下,我看不到 MainActivity 类的构造函数。您想从哪个类中获取值?

英文:

I think it's impossible using super() for fragmentActivity parameter. You should send a values to super() method from higher situated constructor. By the way I can't see a constructor for MainActivity class. From which one class you want get a values?

答案2

得分: 0

使用super()在构造函数中,你试图调用父类的构造函数。

在这种情况下,FragmentStateAdapter 有3个构造函数:

  1. FragmentStateAdapter(FragmentActivity fragmentActivity)
  2. FragmentStateAdapter(Fragment fragment)
  3. FragmentStateAdapter(FragmentManager fragmentManagerLifecycle lifecycle)

在你的情况下:

  1. public AuthenticationPagerAdapter(FragmentManager fragmentActivity)

super(FragmentManager); 不匹配 任何超类构造函数。

你可以使用类似这样的代码:

  1. public AuthenticationPagerAdapter(FragmentActivity fragmentActivity) {
  2. super(fragmentActivity);
  3. }
  4. public AuthenticationPagerAdapter(FragmentManager fragmentManager, Lifecycle lifecycle) {
  5. super(fragmentManager, lifecycle);
  6. }
英文:

Using the super() in a constructor you are trying to call the constructor of the parent class.

In this case the FragmentStateAdapter has 3 constructors:

  1. FragmentStateAdapter(FragmentActivity fragmentActivity)
  2. FragmentStateAdapter(Fragment fragment)
  3. FragmentStateAdapter(FragmentManager fragmentManager, Lifecycle lifecycle)

In your case you have:

  1. public AuthenticationPagerAdapter(FragmentManager fragmentActivity)

and super(FragmentManager); doesn't match any super constructor.

You can use something like:

  1. public AuthenticationPagerAdapter(FragmentActivity fragmentActivity) {
  2. super(fragmentActivity);
  3. }
  4. public AuthenticationPagerAdapter(FragmentManager fragmentManager,Lifecycle lifecycle) {
  5. super(fragmentManager, lifecycle);
  6. }

huangapple
  • 本文由 发表于 2020年8月30日 23:37:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/63659135.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定