2016-08-24 66 views
0

我有兩個片段A和B B擴展片段A,使得呼叫超級超級類的onResume()和onCreae()

public class A extends Fragment{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //other stuff 
    } 
    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     someFunctionOnlyUsefulInFragmentA() 
    } 
} 

而對於第二類:

public class B extends A{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //other stuff 
    } 
    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     //Problem! I don't want to call function "someFunctionOnlyUsefulInFragmentA()" 
    } 
} 

的問題是我不想執行片段A的onResume()onCreate()方法中的所有代碼,但是一些自定義代碼僅用於片段B中。但是,安卓迫使我調用super.onCreate()super.onResume()

如何在片段B的onCreate()onResume()方法中執行一些自定義代碼而無需調用片段A中的代碼?

我是否需要更改整個代碼設計?如果是這樣,怎麼樣?

+0

然後,不要將代碼放在片段A的onResume中 –

+0

您不必調用'super.onCreate()'和'super.onResume()'。 「Android強制你」是什麼意思? –

+0

嗯,我確實需要在片段A的onResume()方法中執行一些代碼!我的應用程序崩潰,如果我不包括超級電話。 – Merlin1896

回答

3

您的問題與繼承有關,而不是Android碎片。例如,您需要重新考慮類設計 - 而不是從A類推導類B,引入類BaseFragment,它們都具有AB派生自(並共享某些功能),並且僅將someFunctionOnlyUsefulInFragmentA()片段放在A片段中。你上面試圖做的是明顯違反Liskov Substitution Principle

+0

井Liskov替代原則+1 –

0

你有一些幾件事情可以做:

  1. 不要讓B類擴展類A,使其延長Fragment
  2. 做一些東西恢復的someFunctionOnlyUsefulInFragmentA()內B類的onResume()的影響
  3. 不要把someFunctionOnlyUsefulInFragmentA()內A級onResume(),或放的條件之前,以防止調用該機能的研究在某些情況下
+4

選項2將是非常愚蠢的(沒有進攻) –

+0

你不知道它做了什麼,也許它做了一些真正無用的,你可以輕鬆地恢復它 –

+2

它doesn不管它做什麼,它的概念是愚蠢的 –