¿Cómo puedo pasar una función como un parámetro a otra función en android?

Entonces, ¿cómo puedo pasar una función como un parámetro a otra función, por ejemplo, quiero pasar esta función:

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

en esto:

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

Puede utilizar un Runnable para envolver su método:

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

Luego pasarlo a su método y llamar a r.run(); Donde lo necesite:

 public static void dialogUpozorenjaTest(..., final Runnable func){ //..... .setPositiveButton("OK",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { func.run(); } }); } 

Bueno, ya que no hay dellegates en Java (oh C # te extraño tanto), la forma en que puedes hacerlo es crear una clase que implemente una interfaz, tal vez runnable o alguna interfaz personalizada y que usted puede llamar a su método a través de la interfaz .

Las funciones no se pueden transmitir directamente. Puede utilizar una implementación de interface como un mecanismo de devolución de llamada para realizar la llamada.

Interfaz:

 public interface MyInterface { public void testFunkcija(); } 

Implementación:

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

Y pasarla una instancia MyInterfaceImpl según sea necesario para:

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

La forma más sencilla es usar runnable vamos a ver cómo

 //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"); } 

Ahora vamos a ver cómo puedo pasar cualquier función que (no voy a usar la expresión lambda)

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

Pasemos otra función

 Runnable r = new Runnable() { @Override public void run() { if(!this.getClass().equals(MyProfileActivity.class)) { MyProfileActivity.startUserProfileFromLocation( MainActivity.this); overridePendingTransition(0, 0); } } }; doSomethingOrRegisterIfNotLoggedIn(r); 

Eso es Feliz pensamiento grande

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.