2016-01-21 45 views
0

我有幾個具有類似行爲的活動我創建了一個基類活動類,以充當每個類的父類,其中可以實現常用的元素和方法。使用抽象類和Android活動

public abstract class ParentActivity extends AppCompatActivity{ 
    public Class<AppCompatActivity> actRoot; 

    void btnCancel(View v){ 
     Intent i = new Intent(this, actRoot); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(i); 
     finish(); 
    } 
} 

我接下來要定義一個子類,如下所示

public void ChildActivity extends ParentActivity{ 
    @Overide 
    public void onCreate(Bundle savedInstance){ 
     actRoot = MainActivity.class; 
    } 
} 

法根可以是AppCompatActivity任何子女或孫子女。

如何在此上下文中定義要動態使用的類引用作爲AppCompatActivity的相對值?

+1

爲什麼你需要有一個類參考你所有的子類活動? – TheSunny

回答

1

你的方法可能是不可取的,但如果你想嘗試它,你會使用它代替:

public Class<? extends AppCompatActivity> actRoot; 

再後來:

actRoot = MainActivity.class; 
+0

您能否提供具體或特定的原因列表,爲什麼這種方法不可取,以便我可以重構問題? 你的代碼確實有效,所以如果原始問題是有效的,你有答案。 – earnshae

+0

這取決於'actRoot'的目的是什麼,在你的例子中很難說。我說這可能不是可取的,因爲在你的例子中,當點擊取消按鈕時,你正在使用'actRoot'開始一個活動。在這種情況下,典型的做法是完成當前的活動,並讓後面的堆棧中的前一個活動返回,如果有人回來,就好像用戶按下後退按鈕一樣。 –

+0

謝謝,我認爲這可能會回答我的另一個問題。我會考慮一分鐘,然後更新代碼以在問題中反映這一點。 – earnshae

0

我不認爲這樣做是個好主意。如果你有太多的類,你不能靜態地定義它們中的每一個,那很可能是你錯過了其他一些方法來分解你的代碼。

無論如何我會回答:你可以使用delegation pattern,這個鏈接的維基百科文章會比我更好地解釋。