在几乎所有脚本中使用相同的自定义方法

问题描述:

我正在处理一个项目,并且我注意到我需要在几乎所有脚本中复制和粘贴相同的自定义方法。我在做什么错了?我一遍又一遍地复制它。任何帮助深表感谢。在几乎所有脚本中使用相同的自定义方法

样品:

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(); 
    } 
} 

创建一个帮助程序类(可以说帮助程序)并将该类文件中的所有重复方法移动到访问修改器中,如public static。这样做将允许您将方法与类名称一起作为前缀进行调用。请看下图:

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

我想过这个,谢谢! – Xarialon 2012-04-11 09:18:31

您可以使用库项目,并把这种方法和类的吧。有关管理Android库项目的更多信息,请参阅this

+0

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

有一个原理知道为D.R.Y不要重复自己

这是没有用的,并且容易出错,重复代码。如果您希望修改重复代码中的行为,则必须修改代码的所有副本。这很容易出错,因为代码很容易失去同步。

+0

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

这是相当出上下文代码,所以很难给你一个明确的答案,但一般:当你想显示干杯

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