2015-02-23 7 views
0

У меня 2 класса:Pass метод через/в качестве параметра - Android

TelaCadastroRestaurante (расширяет активность) и Metodos (не распространяется активность).

На моем первом классе у меня есть это: http://i.imgur.com/N0jrjc1.png

На моем втором классе у меня есть это: http://i.imgur.com/PimEoxr.png

Итак, что же я хочу? В моем методе caixaCerteza(), я хочу передать метод mandarNuvem() через/в качестве параметра 3.


общественный класс TelaCadastroRestaurante расширяет активность {

private EditText nomeRestaurante, emailRestaurante, telefoneRestaurante; 
private Button buttonProximo; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tela_cadastro_restaurante); 
    incializarComponentes(); 
    acaoBotoes(); 
} 

public void incializarComponentes() { 
    nomeRestaurante = (EditText) findViewById(R.id.editTextNomeRestauranteTelaCadastroRestaurante); 
    emailRestaurante = (EditText) findViewById(R.id.editTextEmailRestauranteTelaCadastroRestaurante); 
    telefoneRestaurante = (EditText) findViewById(R.id.editTextTelefoneRestauranteTelaCadastroRestaurante); 
    buttonProximo = (Button) findViewById(R.id.buttonProximoTelaCadastroRestaurante); 

} 

public void acaoBotoes() { 
    buttonProximo.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      pegarValores(); 
      callMandarNuvem(); 
     } 
    }); 
} 

public void pegarValores(){ 
    final Restaurante rest = new Restaurante(); 
    rest.setNomeRest(nomeRestaurante.getText().toString()); 
    rest.setEmailRest(emailRestaurante.getText().toString()); 
    rest.setTelefoneRest(Integer.parseInt(telefoneRestaurante.getText().toString())); 

} 

public void callMandarNuvem(){ 
    Metodos.caixaCerteza(TelaCadastroRestaurante.this, 
         "Você tem certeza que deseja cadastrar o restaurante " + nomeRestaurante.getText().toString() + "?", 
         Metodos.mandarNuvem(TelaCadastroRestaurante.this)); 
} 

}

общественного класса Metodos {

private static ProgressDialog dialog; 

// Metodo que mostra o Aguarde a verificação 
public static void taskInProgres(boolean mostrar, Context context) { 

    if (dialog == null) { 
     dialog = new ProgressDialog(context); 
     dialog = ProgressDialog.show(context, "","Espere um momento...", true); 
    } 
    if (mostrar) { 
     dialog.show(); 
    } else { 
     dialog.dismiss(); 
    } 
} 

// Metodo que mostra a caixa de certeza 
public static void caixaCerteza(final Context context, final String texto, final Metodos metodo) { 
    AlertDialog.Builder builderaction = new AlertDialog.Builder(context); 
    builderaction.setTitle("Atenção!"); 
    builderaction.setMessage(texto); 

    builderaction.setPositiveButton("Sim",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }); 
    builderaction.setNegativeButton("Não",new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
    AlertDialog alert = builderaction.create(); 
    alert.setIcon(R.drawable.ic_stop); 
    alert.show(); 
} 


public static void mandarNuvem(final Context context){ 

    Metodos.taskInProgres(true, context); 

     Restaurante rest = new Restaurante(); 

     ParseObject restauranteParse = new ParseObject("Restaurante"); 
     restauranteParse.put("nomeRestaurante", rest.getNomeRest()); 
     restauranteParse.put("emailRestaurante", rest.getEmailRest()); 
     restauranteParse.put("telefoneRestaurante", rest.getTelefoneRest()); 
     restauranteParse.saveInBackground(new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
       if (e == null) { 
        Toast.makeText(context,"Salvo com sucesso!", Toast.LENGTH_SHORT).show(); 
        Metodos.taskInProgres(false, context); 
       } else { 
        Toast.makeText(context, e.getMessage(),Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 
} 
+1

Не размещайте ваш код или другой текст в качестве изображения, копируйте и вставьте в свой вопрос. – gvlasov

+0

@Suseika, Хорошо, извините – lurdes

ответ

1

Вы не можете передать метод, а объект, содержащий метод. Это означает, что может быть немного больше кода. Вызов caixaCerteza с чем-то вроде

caixaCerteza(..., ..., new Callable() { 
    @Override 
    public void call() { 
     mandarNuvem(); 
    } 
}); 

В методе caixaCerteza(..., ..., Callable callable), выполнить метод с

callable.call(); 

EDIT:

Это даже может быть упрощена, если метод mandarNuvem может быть поставлен в классе который реализует некоторый интерфейс/расширяет суперкласс (например, Callable), который затем может служить третьим параметром caixaCerteza directc (вместо того, чтобы обернуть его в анонимный объект Callable).

+0

Посмотрите, что я просто сделал: http://i.imgur.com/5fNB2o7.png И http://i.imgur.com/jLjr1lG.png Затем, каждый раз Я хочу передать другой метод в caixaCerteza(), я создам новый Runnable с помощью метода, который я хочу, внутри этого Runnable .... Я сделал это правильно? – lurdes

+0

Да, вы можете сделать это таким образом. – fjf2002

Смежные вопросы