【发布时间】:2014-05-15 15:08:52
【问题描述】:
我正在尝试创建一个基类 fragmentstatepageradapter,我希望 getItem 方法返回一个新的片段实例,但我希望该片段是任何可能的子类型。我想它会是这样的,但它会抛出一个错误:
@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),它说
“Class中的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 以返回它们自己的片段。
【问题讨论】:
-
第一个解决方案闻起来像是不必要的 hack 恕我直言,更不用说反射很慢,从长远来看可能会影响您的用户体验。
-
这只是一个猜测,但 Java String 类是不可变的,这可以解释错误。您是否在其他课程上尝试过此代码?可变和不可变?
标签: java android class inheritance