首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PagerTabStrip活动无法实例化类型PagerAdapter

PagerTabStrip活动无法实例化类型PagerAdapter
EN

Stack Overflow用户
提问于 2012-11-27 23:19:18
回答 3查看 1.9K关注 0票数 2

你能帮我解决一个问题吗?

我正在做一个使用pagerStrips的应用程序,我在博客上读到了这段代码:

(简而言之,它对每个pageStrip使用不同的片段,在本例中它有3个不同的条带,所以它有3个不同的布局)。

代码语言:javascript
复制
package com.tabs;

import java.util.List;
import java.util.Vector;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.view.View;

public class Testi extends FragmentActivity {

// list contains fragments to instantiate in the viewpager
  List<Fragment> fragments = new Vector<Fragment>();
  List<String> fragmentTitles = new Vector<String>();
  // page adapter between fragment list and view pager
  private PagerAdapter mPagerAdapter;
  // view pager
  private ViewPager mViewPager;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getSupportFragmentManager();
        // creating fragments and adding to list
        fragments.add(Fragment.instantiate(this, Page1Fragment.class.getName()));
        fragmentTitles.add(Page1Fragment.class.getSimpleName());
        fragments.add(Fragment.instantiate(this, Page2Fragment.class.getName()));
        fragmentTitles.add(Page2Fragment.class.getSimpleName());
        fragments.add(Fragment.instantiate(this, Page3Fragment.class.getName()));
        fragmentTitles.add(Page3Fragment.class.getSimpleName());

        this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(),     fragments, fragmentTitles);

        mViewPager = (ViewPager) findViewById(R.id.pager);
        View pagerStrip = findViewById(R.id.pagerTabStrip);
        if (pagerStrip instanceof PagerTabStrip) {
                PagerTabStrip pagerTabStrip = (PagerTabStrip) pagerStrip;
                pagerTabStrip.setDrawFullUnderline(true);
                pagerTabStrip.setTabIndicatorColorResource(android.R.color.black);
                // pagerTabStrip.setTextColor(color.white);
        } else if (pagerStrip instanceof PagerTitleStrip) {
                PagerTitleStrip pagerTitleStrip = (PagerTitleStrip) pagerStrip;
                pagerTitleStrip.setTextColor(getResources().getColor(android.R.color.white));
        }

        mViewPager.setAdapter(this.mPagerAdapter);
        mViewPager.setCurrentItem(0);
   }

}

但是我得到了错误:"Cannot instantiate the type PagerAdapter

代码语言:javascript
复制
this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments, fragmentTitles);.

你能帮帮我吗?

抱歉,我的英语不好:D

EN

回答 3

Stack Overflow用户

发布于 2015-10-08 23:43:36

PagerAdapter是一个abstract class -您不能实例化它。您必须创建一个new class that inherits from PagerAdapter并使用它。

例如,PagerAdapter可以是这样的

代码语言:javascript
复制
   public abstract class PagerAdapter extends FragmentPagerAdapter {

   // fragments to instantiate in the viewpager
   private List<Fragment> fragments;

   // constructor
   public PagerAdapter(FragmentManager fm,List<Fragment> fragments) {
      super(fm);
      this.fragments = fragments;
   }

   // return access to fragment from position, required override
   @Override
   public Fragment getItem(int position) {
      return this.fragments.get(position);
   }

   // number of fragments in list, required override
   @Override
   public int getCount() {
      return this.fragments.size();
   }

}

注意:在imports中,PagerAdapter应该是您自己的。不是import android.support.v4.view.PagerAdapter

票数 1
EN

Stack Overflow用户

发布于 2013-12-06 02:41:07

PagerAdapter是您必须实现的抽象类。在派生类中引入元素抽象方法,或者使用可用类之一,即FragmentPagerAdapter或FragmentStatePagerAdapter。

票数 0
EN

Stack Overflow用户

发布于 2017-08-09 03:31:59

您还可以使用内置的FragmentPagerAdapter (针对此用例构建),而不是创建新的PagerAdapter实现,如下所示:

代码语言:javascript
复制
        final List<Fragment> fragments = new Vector<>();
        fragments.add(Fragment.instantiate(this, FragmentOne.class.getName()));
        fragments.add(Fragment.instantiate(this, FragmentTwo.class.getName()));

        PagerAdapter adapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return fragments.get(position);
            }

            @Override
            public int getCount() {
                return fragments.size();
            }
        };
        final ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(adapter);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13587316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档