通过/作为参数传递方法 - ANDROID

时间:2015-02-23 20:08:48

标签: java android

我有2个班级:

TelaCadastroRestaurante(扩展活动)和Metodos(不扩展活动)。

在我的第一堂课上,我有这个:http://i.imgur.com/N0jrjc1.png

在我的第二堂课上,我有这个:http://i.imgur.com/PimEoxr.png

那么,我想要什么?在我的方法caixaCerteza()中,我希望通过/作为PARAMETER 3传递方法mandarNuvem()。


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

答案 0 :(得分:1)

您无法传递方法,但包含方法的对象。这意味着可能会有更多的代码。使用类似

的方式调用caixaCerteza
caixaCerteza(..., ..., new Callable() {
    @Override
    public void call() {
        mandarNuvem();
    }
});

在方法caixaCerteza(..., ..., Callable callable)中,使用

执行方法
callable.call();

修改

如果方法mandarNuvem可以放在实现某个接口/扩展超类(例如,Callable)的类中,然后可以作为{的第三个参数,那么这甚至可以简化。直接{1}}(而不是将其包装在匿名的caixaCerteza对象中)。