2015-05-20 5 views
0

Я хотел бы повторно использовать AlertBuilder и поэтому поместить его создание в собственный метод. Что-то вроде этого:Java: как повторно использовать прослушиватели

private boolean askToDiscardChanges() { 

    final boolean result = false; 

    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

      switch (which){ 
       case DialogInterface.BUTTON_POSITIVE: 
        result = true; 
        break; 
       case DialogInterface.BUTTON_NEGATIVE: 
        result = false; 
        break; 
      } 
     } 
    }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(NewShootingActivity.this); 
    builder.setMessage(getResources().getString(R.string.msgDiscardChanges)).setPositiveButton(getResources().getString(R.string.lblYes), dialogClickListener) 
      .setNegativeButton(getResources().getString(R.string.lblNo), dialogClickListener).show(); 

    return result; 
} 

К сожалению, это не работает, но я надеюсь, что это поможет понять мою проблему. Можно ли вернуть результат слушателя? Как?

Thanks

+0

Вы смешиваете синхронный асинхронный код, который не будет работать. Просто передайте слушателя в качестве аргумента в метод 'askToDiscardChanges()'. В качестве альтернативы вы можете реализовать слушателя в классе, который содержит метод 'askToDiscardChanges()'. Здесь вы можете многое сделать. –

+0

Да, действительно. Я приспособил код: askToDiscardChanges (новый DiscardCallbackInterface() { @Override общественного недействительными onUserSelection (логический результат) { , если (результат == TRUE) { NavUtils.navigateUpFromSameTask (NewShootingActivity.this); }} }); – AntonSack

ответ

2

Слушатель - это функция обратного вызова. Он будет называться в более поздний момент времени, возможно, в будущем, или даже, возможно, никогда. Так что нет, он не может вернуть значение, потому что мы еще не знаем, что вернуть. Если вы хотите запустить какой-то код на основе вызываемого вызова, вам нужно поместить этот код в обратный вызов.

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