英文:
Cannot resolve method super() error in fragmentmanager Android
问题
我不是Java程序员,但我在尝试构建一个应用程序的同时也在学习Java编程。我试图添加两个片段,一个是登录片段,另一个是注册片段,但在使用超类构造函数时,我遇到了"cannot resolve"错误。有人能指出我做错了什么吗?
我知道"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;
}
}
}
英文:
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:
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
得分: 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个构造函数:
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);
}
英文:
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:
FragmentStateAdapter(FragmentActivity fragmentActivity)
FragmentStateAdapter(Fragment fragment)
FragmentStateAdapter(FragmentManager fragmentManager, Lifecycle lifecycle)
In your case you have:
public AuthenticationPagerAdapter(FragmentManager fragmentActivity)
and super(FragmentManager);
doesn't match any super constructor.
You can use something like:
public AuthenticationPagerAdapter(FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
public AuthenticationPagerAdapter(FragmentManager fragmentManager,Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论