2013-07-29 27 views
0

我想扩展Fragment类,但我希望能够用我的类HoloEverywhere并用默认的片段......延长未知的超类装饰图案,并覆盖功能

所以我试图用一个装饰...

public abstract class RFragment<F extends Fragment, I extends LayoutInflater> extends Fragment implements IKey 
{ 
    private final Class<F> mFragmentClass; 
    private final Class<I> mInflatorClass; 

    public RFragment(Class<F> fragmentClass, Class<I> inflatorClass) 
    { 
     this.mFragmentClass = fragmentClass; 
     this.mInflatorClass = inflatorClass; 
    } 
} 

我现在也希望覆盖onCreateView,但我不能这样做。我尝试是以下几点:

@Override 
public View onCreateView(I inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    if (view == null) 
    { 
     view = doOnCreateView(inflater, container, savedInstanceState); 
     loadingIndicator = doGetLoadingIndicatorView(view); 
    } 
    return view; 
} 
protected abstract View doOnCreateView(I inflater, ViewGroup container, Bundle savedInstanceState); 
protected abstract View doGetLoadingIndicatorView(View view); 

但这是不允许的,因为我不能覆盖的功能,如果该参数不匹配

是它在某种程度上可能(I = LayoutInflator!)解决这个问题?我想避免复制我的类,只是将默认片段和默认LayoutInflator中的导入更改为HoloEveryhwere中的导入(它只扩展默认类)...

回答

0

您不能这样覆盖函数,因为I更精确的是LayoutInflater 我建议你使用的东西题刻的是:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    I infl = (I) inflater; // May be unchecked 
    if (view == null) 
    { 
     view = doOnCreateView(infl, container, savedInstanceState); 
     loadingIndicator = doGetLoadingIndicatorView(view); 
    } 
    return view; 
} 

其实,我不知道为什么你需要使用的TypeVariable为一,你有LayoutInflater的一个子类?也许只要在任何地方使用LayoutInflater就足够了?

+0

HoloEverywhere是一个库(不是我自己),它可以用来在老的android系统上获得Holo的视觉风格以及...他们扩展了布局充气机以及...所以'onCreateView'将被调用在第一种情况下使用'org.holoeverywhere.LayoutInflator',在第二种情况下使用'android.view.LayoutInflater' ... – prom85

+0

不知道=)谢谢。你有没有尝试我的答案的第一部分? –

+0

实际上,这将无法正常工作...全息库使'onCreateView'最终和内部设定LayoutInflator使用(自己或默认),因为在新的Android系统上使用默认的默认设置,只有旧的一个是使用... – prom85