¿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

  • Mapeo entre los permisos de Android (que definimos en el archivo manisfest) a las llamadas / métodos de API correspondientes
  • Comunicación entre BroadcastReceiver y Activity - android
  • ¿Por qué no AsyncTasks siempre funcionan dentro de un onClickListener?
  • Android infla la vista utilizando un objeto de vista existente
  • Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
  • Pregunta de actividad (principiante)
  • ¿Cómo retraso un método en un bucle for en java?
  • Error de "no incluir instancia de tipo" al llamar al método de otra clase en Android
  • Teclado Android: no inicializa el cliente de búfer compartido porque token = -12
  • Java argumento de longitud variable múltiple
  • Cómo reemplazar el método a través del atajo de teclado en Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.