你能帮我解决一个问题吗?
我正在做一个使用pagerStrips的应用程序,我在博客上读到了这段代码:
(简而言之,它对每个pageStrip使用不同的片段,在本例中它有3个不同的条带,所以它有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
发布于 2015-10-08 23:43:36
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();
}
}注意:在imports中,PagerAdapter应该是您自己的。不是import android.support.v4.view.PagerAdapter。
发布于 2013-12-06 02:41:07
PagerAdapter是您必须实现的抽象类。在派生类中引入元素抽象方法,或者使用可用类之一,即FragmentPagerAdapter或FragmentStatePagerAdapter。
发布于 2017-08-09 03:31:59
您还可以使用内置的FragmentPagerAdapter (针对此用例构建),而不是创建新的PagerAdapter实现,如下所示:
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);https://stackoverflow.com/questions/13587316
复制相似问题