2011-11-19 15 views
3

在各種活動中,我有非常類似的方法。在Java中,如何使用繼承來簡化我的代碼? (Android Dev。)

例如:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.ibHome: 
     Intent menuIntent = new Intent(v.getContext(),Menu.class); 
     startActivity(menuIntent); 
     break; 
    } 

} 

@Override 
public void onClick(View v) { 
    /** */ 

    // 
    switch(v.getId()){ 
     case R.id.bNew: 
      Intent newSwimmerIntent = new Intent(v.getContext(),NewSwimmer.class); 
      startActivity(newSwimmerIntent); 
      break; 
case R.id.ibHome: 
      Intent menuIntent = new Intent(v.getContext(),Menu.class); 
      startActivity(menuIntent); 
      break; 

有沒有辦法(我假設將使用繼承),以防止menuIntent在每個每一類可明確規定?

謝謝。

回答

2

你可以使用繼承,但實際上可能不是最好的選擇,特別是如果這兩個活動在「Is-A」關係中不直接相關。

在這種情況下,您最好宣佈一個實現OnClickListener接口的新類。然後,您可以實例化該類並將其綁定到按鈕的單擊事件,無論它們在何處使用。

下面是一個例子:

public class HomeButtonHandler implements OnClickListener{ 

     @Override 
     public void onClick(View v) { 
      Intent menuIntent = new Intent(v.getContext(),Menu.class); 
      v.getContext().startActivity(menuIntent);    

     } 

    } 

而在你的活動,你可以在HomeButtonHandler只是綁定到按鈕的onClickListner:

homeButton.setOnClickListener(new HomeButtonHandler()); 
+0

你可以給這個代碼示例嗎?我是Java的新手,儘管我理解這個概念,但我不確定如何實現它。謝謝。 – Sheldon

+0

@Sheldon:我編輯的答案包括一個例子。 – Chris

+0

我試圖實現這個,但它崩潰的應用程序。我認爲這是因爲HomeButtonHandler必須從Activity繼承才能使用startActivity方法。 – Sheldon

1

創建爲您的所有活動的共同BaseActivity,然後只覆蓋BaseActivity.onClick()方法。

通過這種方式,您將擁有適用於您所有活動的單個開關。