9

では、関数をパラメーターとして別の関数に渡すにはどうすればよいですか。たとえば、この関数を渡したい場合:

public void testFunkcija(){
    Sesija.forceNalog(reg.getText().toString(), num);
}

これで:

    public static void dialogUpozorenjaTest(String poruka, Context context, int ikona, final Method func){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);
        alertDialogBuilder.setTitle("Stanje...");
        alertDialogBuilder
            .setMessage(poruka)
            .setIcon(ikona)
            .setCancelable(true)                        
            .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    //here
                }
              });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
}
4

4 に答える 4

21

Runnable を使用してメソッドをラップできます。

Runnable r = new Runnable() {
    public void run() {
        Sesija.forceNalog(reg.getText().toString(), num);
    }
}

r.run();次に、それをメソッドに渡し、必要な場所で呼び出します。

public static void dialogUpozorenjaTest(..., final Runnable func){
    //.....
        .setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                func.run();
            }
          });
}
于 2012-10-18T13:16:22.923 に答える
3

Java にはデリゲートがないので (ああ、C# が恋しいです)、実行可能なインターフェイスまたはカスタム インターフェイスを実装するクラスを作成し、インターフェイスを介してメソッドを呼び出すことができます。 .

于 2012-10-18T13:16:51.550 に答える
2

関数自体を直接渡すことはできません。interface呼び出しを行うためのコールバック メカニズムとして実装を使用できます。

インターフェース:

public interface MyInterface {

   public void testFunkcija();
}   

実装:

public class MyInterfaceImpl implements MyInterface 
   public void testFunkcija(){
       Sesija.forceNalog(reg.getText().toString(), num);
   }
}

MyInterfaceImpl必要に応じてインスタンスに渡します。

public static void dialogUpozorenjaTest(MyInterface myInterface, ...)

   myInterface.testFunkcija();
   ...
于 2012-10-18T13:15:39.960 に答える