我正在尝试创建一个基类 fragmentstatepageradapter,我希望 getItem 方法返回一个新的 fragment 实例,但我希望该 fragment 是任何可能的子类型。我认为它会是这样的,但它抛出了一个错误:
@Override
public Fragment getItem( int position ) {
if( mRosterUids == null || mRosterUids.size() <= position )
return null;
Log.e( "RosterDetailsPagerAdapter", "getItem(): " + mRosterUids.get(position) );
return getItemClass().newInstance(mRosterUids.get(position));
}
public java.lang.Class<SLRosterDetailsFragment> getItemClass() {
return SLRosterDetailsFragment.class;
}
错误消息来自 newInstance 内部的 mRosterUids.get(position),它说
“类中的 newInstance() 不能应用于 (java.lang.String)”
不太灵活的工作版本是:
@Override
public Fragment getItem( int position ) {
if( mRosterUids == null || mRosterUids.size() <= position )
return null;
Log.e( "RosterDetailsPagerAdapter", "getItem(): " + mRosterUids.get(position) );
return SLRosterDetailsFragment.newInstance(mRosterUids.get(position));
}
这是否可能开始工作,或者我应该让我的子函数覆盖 getItem 以返回它们自己的 fragment 。
最佳答案
将您的 getItemClass() 更改为
public <T extends Object> T getItemClass() { return SLRosterDetailsFragment.class; }
关于Java/安卓 : Return a class name through a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23682179/