如何将一个函数作为参数传递给android中的另一个函数?

时间:2012-10-18 13:12:23

标签: java android methods parameters

那么如何将函数作为参数传递给另一个函数,例如我想传递这个函数:

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 个答案:

答案 0 :(得分:16)

您可以使用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();
            }
          });
}

答案 1 :(得分:3)

好吧,因为Java中没有dellegates(哦C#我很想念你),你可以这样做的方法是创建一个实现接口的类,可能是runnable或者是一些自定义接口,而不是你可以调用你的方法通过界面。

答案 2 :(得分: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();
   ...

答案 3 :(得分:0)

最简单的方法是使用runnable 让我们看看如何

//this function can take function as parameter 
private void doSomethingOrRegisterIfNotLoggedIn(Runnable r) {
    if (isUserLoggedIn())
        r.run();
    else
        new ViewDialog().showDialog(MainActivity.this, "You not Logged in, please log in or Register");
}

现在让我们看看如何传递任何函数(我不会使用lambda表达式)

Runnable r = new Runnable() {
                @Override
                public void run() {
                    startActivity(new Intent(MainActivity.this, AddNewPostActivity.class));
                }
            };
doSomethingOrRegisterIfNotLoggedIn(r);

让我们传递另一个功能

Runnable r = new Runnable() {
                @Override
                public void run() {
                    if(!this.getClass().equals(MyProfileActivity.class)) {
                        MyProfileActivity.startUserProfileFromLocation( MainActivity.this);
                        overridePendingTransition(0, 0);
                     }
                }
            };
doSomethingOrRegisterIfNotLoggedIn(r);
是的,是的。快乐的大思考......