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

4 に答える 4

2

ヘルパークラス(たとえばHelper)を作成し、アクセス修飾子をとして使用して、そのクラスファイル内のすべての反復メソッドを移動しますpublic static。そうすることで、プレフィックスとしてクラス名を使用してメソッドを呼び出すことができます。下記参照:

public class Helper{

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

トーストを見せたいときは、アクティビティで次のように呼びます。

Helper.showToast(this, "hello world!");
于 2012-04-11T09:09:13.463 に答える
1

これはコンテキストコードからかなり外れているため、明確な答えを出すのは難しいですが、一般的な原則は同じです。コードを繰り返さないでください。特にハードコードされた値を処理する場合は、コード内のすべての形式の繰り返しを排除することを目指す必要があります。これを行う一般的な方法は、他のクラスで静的関数を提供するか、繰り返し必要になるすべてのコア機能を含むスーパークラスを作成することです。inheritance以下は、コードの使用方法とabstract 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での継承の詳細については、ここを参照してください。

于 2012-04-11T09:10:06.920 に答える
1

ライブラリ プロジェクトを使用して、その中にそのようなメソッドやクラスを配置できます。Android ライブラリ プロジェクトの管理の詳細については、こちらを参照してください

于 2012-04-11T09:08:15.817 に答える
1

DRYとして知られている原則があります。自分自身を繰り返さないでください。

コードを繰り返すのは役に立たず、エラーが発生しやすくなります。繰り返しコードの動作を修正したい場合は、コードのすべてのコピーで修正する必要があります。コードが同期しなくなりやすいため、これはエラーが発生しやすくなります。

于 2012-04-11T09:08:38.253 に答える