2013-07-29 51 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