2

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

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

(简而言之,它为每个 使用不同的片段pageStrip,在这种情况下它有 3 个不同的条带,因此它具有三种不同的布局)。

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

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

拜托,你能帮帮我吗?

对不起我的英语不好:D

4

3 回答 3

1

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

因此,例如 PagerAdapter 可以像

   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();
   }

}

注意:在导入PagerAdapter中应该是你自己的。不是import android.support.v4.view.PagerAdapter

于 2015-10-08T15:43:36.027 回答
0

PagerAdapter 是您必须实现的抽象类。派生类中的 Impelement 抽象方法或使用可用类之一,即 FragmentPagerAdapter 或 FragmentStatePagerAdapter。

于 2013-12-05T18:41:06.520 回答
0

除了创建 PagerAdapter 的新实现之外,您还可以使用内置的 FragmentPagerAdapter(为此用例构建),如下所示:

        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);
于 2017-08-08T19:31:58.637 回答