2012-04-11 52 views
0

我正在處理一個項目,並且我注意到我需要在幾乎所有腳本中複製和粘貼相同的自定義方法。我在做什麼錯了?我一遍又一遍地複製它。任何幫助深表感謝。在幾乎所有腳本中使用相同的自定義方法

樣品:

public class EventHome extends Activity implements OnClickListener{ 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
    } 

    /******************************************************************** 
    * SHORTENED TOAST             * 
    *********************************************************************/ 
    public void showToast(String value){ 
     Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); 
    } 


    /******************************************************************** 
    * SHORTENED ALERTDIALOG            * 
    *********************************************************************/ 
    public void showAlert(String title, String btn_txt, String message){ 
     final AlertDialog.Builder alert = new AlertDialog.Builder(EventHome.this); 
     alert.setTitle(title).setMessage(message) 
     .setNeutralButton(btn_txt, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        alert.setCancelable(true); 
     }}).show(); 
    } 
} 

回答

2

創建一個幫助程序類(可以說幫助程序)並將該類文件中的所有重複方法移動到訪問修改器中,如public static。這樣做將允許您將方法與類名稱一起作爲前綴進行調用。請看下圖:

Helper.showToast(this, "hello world!"); 
+0

我想過這個,謝謝! – Xarialon 2012-04-11 09:18:31

1

您可以使用庫項目,並把這種方法和類的吧。有關管理Android庫項目的更多信息,請參閱this

+0

這是個好主意。 +1 – Xarialon 2012-04-11 09:21:29

1

有一個原理知道爲D.R.Y不要重複自己

這是沒有用的,並且容易出錯,重複代碼。如果您希望修改重複代碼中的行爲,則必須修改代碼的所有副本。這很容易出錯,因爲代碼很容易失去同步。

+0

感謝您的信息。 +1 – Xarialon 2012-04-11 09:20:36

1

這是相當出上下文代碼,所以很難給你一個明確的答案,但一般:當你想顯示乾杯

public class Helper{ 

    /******************************************************************** 
    * SHORTENED TOAST             * 
    *********************************************************************/ 
    public static void showToast(Context context, String value){ 
     Toast.makeText(context, value, Toast.LENGTH_SHORT).show(); 
    } 
} 

現在叫你們的活動如下校長保持不變:不要重複代碼。您應該旨在消除代碼中的所有形式的重複,特別是在處理硬編碼值時。這樣做的常用方法是在其他類中提供靜態函數,或者創建一個包含所有需要重複使用的核心功能的超類。下面是如何使用inheritanceabstract classes減少碼重複一個簡單的例子:

abstract class CoreMethods extends Activity implements OnClickListener 
{ 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
    } 

    /******************************************************************** 
    * SHORTENED TOAST             * 
    *********************************************************************/ 
    public void showToast(String value){ 
     Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show(); 
    } 


    /******************************************************************** 
    * SHORTENED ALERTDIALOG            * 
    *********************************************************************/ 
    public void showAlert(String title, String btn_txt, String message){ 
     final AlertDialog.Builder alert = new AlertDialog.Builder(EventHome.this); 
     alert.setTitle(title).setMessage(message) 
     .setNeutralButton(btn_txt, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        alert.setCancelable(true); 
     }}).show(); 
    } 

} 

保存在一個名爲CoreMethods.java或類似文件。然後,只要你需要這些方法,你可以簡單地繼承CoreMethods類並訪問函數。

public class ExampleClass extends CoreMethods 
{ 
    private void foo() { 
     super.showToast("bar"); 
     super.showAlert("foobar"); 
    } 
} 

有關Java繼承的更多信息,請參閱here

+0

我已經擴展了一個Activity,所以我需要繼承它還是什麼? – Xarialon 2012-04-11 09:13:04

+0

我現在對你的類的層次結構有點困惑,你沒有提供任何有關類本身的信息。你能編輯問題並提供你正在使用的類定義的框架嗎? – 2012-04-11 09:21:08

+0

啊,對不起,我會盡快編輯它。不管怎麼說,還是要謝謝你。 +1 – Xarialon 2012-04-11 09:22:40

相關問題