2015-09-07 6 views
0

Я хочу, чтобы мой код проверял, содержит ли то, что написано в моем диалоговом окне, определенную строку и если не удается закрыть диалоговое окно. Теперь, когда я нажимаю кнопку ладно диалог исчезает, несмотря на то, появляется тост, так что я предполагаю, что я сделал что-то не так с setCancelableЕсли строка не содержит определенных слов, вы не можете оставить диалог

   protected void showInputDialog() { 
    // get prompts.xml view 
    LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); 
    View promptView = layoutInflater.inflate(R.layout.url, null); 

    final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this, AlertDialog.THEME_HOLO_DARK); 
    alertDialogBuilder.setView(promptView); 

    final EditText editText = (EditText) promptView.findViewById(R.id.Button01); 

    alertDialogBuilder.setTitle("Enter URL"); 
    // alertDialogBuilder.setCustomTitle("Enter URL"); 
    // alertDialogBuilder.setIcon(R.drawable.icon); 

    alertDialogBuilder.setCancelable(false); 

    alertDialogBuilder.setPositiveButton("DONE", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      String value = editText.getText().toString(); 

      if (value.contains("www.facebook.com/")) { 
       //Toast.makeText(getBaseContext(), "You didn't enter the Name",Toast.LENGTH_SHORT).show(); 
       // alertDialogBuilder.setCancelable(false); 
      } 
      else { 
       Toast.makeText(getBaseContext(), "You didn't enter the Name",Toast.LENGTH_SHORT).show(); 
       alertDialogBuilder.setCancelable(false); 
      } 
     } 
    }); 
    // create an alert dialog 
    AlertDialog alert = alertDialogBuilder.create(); 
    alert.show(); 
} 

Любые предложения, как исправить это?

редактировать: Я отправил всю функцию, хотя я не думаю, что это поможет вам

+0

вы выложили не достаточно коды, опубликовать функцию, которая содержит всю этот фрагмент коды? –

+0

@Derek Fung Я отправил весь код, пожалуйста, посмотрите –

ответ

1

и можно использовать onShowListener

dialog.setOnShowListener(new DialogInterface.OnShowListener() { 

    @Override 
    public void onShow(DialogInterface dialog) { 

     Button okBtn = dialog.getButton(AlertDialog.BUTTON_POSITIVE); 
     okBtn .setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       if (value.contains("www.stackoverflow.com/")) { 
        //do stuff 
        d.dismiss();   
        } 
        else 
        { 
         Toast.makeText(getBaseContext(), "You didn't enter the Name     correctly",Toast.LENGTH_SHORT).show(); 
         alertDialogBuilder.setCancelable(false); 
         //Don't put dismiss() here 
        } 

      } 
     }); 
    } 
}); 

, основанный на том, что я понял из вашего вопроса, это должно работа

+0

Моя проблема в том, что 'alertDialogBuilder.setCancelable (false);' doen't work, что означает, что диалог отклоняется, когда он не должен –

1

Это не относится к setCancelable, которые запрещают отмену только пользователем, но не отменяют отмену кодом.

По умолчанию AlertDialog закрывается при нажатии любой кнопки, но есть обходной путь.

На самом деле @mothana говорит об одном и том же обходном пути, я пытаюсь объединить его с вашим кодом.

final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this, AlertDialog.THEME_HOLO_DARK); 
alertDialogBuilder.setView(promptView); 

final EditText editText = (EditText) promptView.findViewById(R.id.Button01); 

alertDialogBuilder.setTitle("Enter URL"); 

alertDialogBuilder.setCancelable(false); 

alertDialogBuilder.setPositiveButton("DONE", null); //part of the workaround 
// create an alert dialog 
final AlertDialog alert = alertDialogBuilder.create(); 

// workaround 
alert.setOnShowListener(new DialogInterface.OnShowListener() { 

    @Override 
    public void onShow(DialogInterface dialog) { 

     Button okBtn = dialog.getButton(AlertDialog.BUTTON_POSITIVE); 
     okBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       if (value.contains("www.stackoverflow.com/")) { 
        //you code here 
        alert.dismiss();   
       } 
       else 
       { 
        Toast.makeText(getBaseContext(), "You didn't enter the Name",Toast.LENGTH_SHORT).show(); 
        //Don't put dismiss() here 
       } 

      } 
     }); 
    } 
}); 
alert.show(); 

Вы можете проверить ссылку здесь How to prevent a dialog from closing when a button is clicked