PagerAdapter是抽象的,无法实例化错误。我该如何解决?

huangapple 未分类评论41阅读模式
英文:

PagerAdapter is abstract; cannot be instantiated error. How can i fix it?

问题

我的MainActivity.java文件夹内容如下。我已经导入了所有需要的部分,但是出现了错误“PagerAdapter is abstract; cannot be instantiated”。

  1. public class MainActivity extends AppCompatActivity {
  2. BottomBar bottomBar; //底部导航栏
  3. //用于ViewPager的fragment列表
  4. List<Fragment> fragmentList = new ArrayList<>();
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. //定义ViewPager(用于创建滑动主屏幕并添加相机和消息部分)
  10. ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
  11. //将所需的fragment添加到fragment列表中
  12. fragmentList.add(new ViewPager_Camera());
  13. fragmentList.add(new ViewPager_Home());
  14. fragmentList.add(new ViewPager_Message());
  15. PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), fragmentList);
  16. pager.setAdapter(adapter);
  17. //定义底部导航栏并启用选择监听功能
  18. bottomBar = (BottomBar) findViewById(R.id.bottom_bar);
  19. }
  20. }

我的PagerAdapter类如下:

  1. public class PagerAdapter extends FragmentPagerAdapter {
  2. //定义fragment列表
  3. List<Fragment> fragmentList = new ArrayList<>();
  4. public PagerAdapter(@NonNull FragmentManager fm, List<Fragment> fragList) {
  5. super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
  6. this.fragmentList = fragList;
  7. }
  8. @NonNull
  9. @Override
  10. public Fragment getItem(int position) {
  11. //从列表中获取对应位置的fragment
  12. return fragmentList.get(position);
  13. }
  14. @Override
  15. public int getCount() {
  16. //显示fragment列表的大小
  17. return fragmentList.size();
  18. }
  19. }

如何修复这个错误?我尝试过更改适配器的名称,但仍然出现错误。问题可能出现在使用的方法中吗?

英文:

My MainActivity.Java folder like that. I did all import but It gives error "PagerAdapter is abstract; cannot be instantiated"

  1. public class MainActivity extends AppCompatActivity {
  2. BottomBar bottomBar; //Bottomnavigationbar
  3. //ViewPager i&#231;in oluşturulan ListAdapterde ki fragmentList
  4. List&lt;Fragment&gt; fragmentList = new ArrayList&lt;&gt;();
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. //viewpager tanımlanması (ana ekrandan kaydırıp kamera ve mesajlaşma kısımlarının oluşturulması i&#231;in)
  10. ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
  11. //fragmentlist&#39;e gerekli fragmentlerin eklenmesi
  12. fragmentList.add(new ViewPager_Camera());
  13. fragmentList.add(new ViewPager_Home());
  14. fragmentList.add(new ViewPager_Message());
  15. PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(),fragmentList);
  16. pager.setAdapter(adapter);
  17. //Bottombar tanımlanması ve selectlistener &#246;zelliği aktif edilmesi
  18. bottomBar = (BottomBar) findViewById(R.id.bottom_bar);

My PagerAdapter is like that

  1. public class PagerAdapter extends FragmentPagerAdapter {
  2. //fragmentList tanımlanması
  3. List&lt;Fragment&gt; fragmentList = new ArrayList&lt;&gt;();
  4. public PagerAdapter(@NonNull FragmentManager fm, int behavior,List&lt;Fragment&gt;fragList) {
  5. super(fm, behavior);
  6. this.fragmentList = fragList;
  7. }
  8. @NonNull
  9. @Override
  10. public Fragment getItem(int position) {
  11. //hangi fragment a&#231;ıksa listeden de o fragment isteniyor
  12. return fragmentList.get(position);
  13. }
  14. @Override
  15. public int getCount() {
  16. //fragmetlist boyutu kadar fragment oldugunu g&#246;steriyor
  17. return fragmentList.size();
  18. }

}

How can I fix this error? I tryed to change adapter name but still had error. May the problem be in the methos using?

答案1

得分: 0

问题在于你正在扩展的类,FragmentPagerAdapter,是一个带有抽象方法的抽象类,而你没有进行覆盖重写。由于你的类仍然至少有一个抽象方法,它也是一个抽象类,因此无法被实例化。

在基类中查找其他抽象方法,并对它们进行覆盖重写。

英文:

The problem is that the class you're extending, FragmentPagerAdapter, is an abstract class with abstract methods which you are not overriding. Since your class still has at least one abstract method, it is an abstract class and therefore cannot be instantiated.

Look in the base class for other abstract methods, and override those, too.

答案2

得分: 0

PagerAdapter 也是一个框架类(androidx.viewpager.widget.PagerAdapter),它是抽象的。您的 MainActivity 可能正在使用错误的类。

将您的 PagerAdapter 类重命名为其他名称,然后查看(比如 MyPagerAdapter)。

英文:

PagerAdapter is also a framework class (androidx.viewpager.widget.PagerAdapter) which is abstract. Your MainActivity is probably using the wrong class.

Rename your PagerAdapter class to something else and see (MyPagerAdapter?).

huangapple
  • 本文由 发表于 2020年7月24日 09:23:10
  • 转载请务必保留本文链接:https://java.coder-hub.com/63065429.html
匿名

发表评论

匿名网友

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

确定