2013-08-05 2 views
0

У меня есть следующий код:.dismiss() показывает ошибку в AlertDialog

  AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); 
      View view = LayoutInflater.from(getActivity()).inflate(R.layout.displayfilecontents, null); 
      EditText text = (EditText) view.findViewById(R.id.etFileContents); 
      if (text != null) { 
       text.setFocusable(false); 
       text.setLongClickable(false); 
       text.setTextIsSelectable(false); 
      } 
      text.setText(builder); 
      b.setView(view); 
      b.setTitle("Trip Name: " + FilesInFolder.get(position).toString().substring(0, FilesInFolder.get(position).toString().lastIndexOf("."))); 
      Button btnCloseIt = (Button) view.findViewById(R.id.btnClose); 
      btnCloseIt.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        b.dismiss(); 
       } 
      }); 
      AlertDialog dl = b.create(); 
      dl.show(); 

Я пытаюсь закрыть диалоговое окно, как только btnCloseIt нажата. Я получаю сообщение об ошибке на этой линии:

b.dismiss(); //giving an error 

Ошибка: The method dismiss() is undefined for the type AlertDialog.Builder

Update: [ПОСТАНОВИЛИ]

 // custom dialog 
     final Dialog dialog = new Dialog(getActivity()); 
     dialog.setContentView(R.layout.displayfilecontents); 
     dialog.setTitle("Trip Name: " + FilesInFolder.get(position).toString().substring(0, FilesInFolder.get(position).toString().lastIndexOf("."))); 

     EditText text = (EditText) dialog.findViewById(R.id.etFileContents); 
     if (text != null) { 
      text.setFocusable(false); 
      text.setLongClickable(false); 
      text.setTextIsSelectable(false); 
     } 
     text.setText(builder); 
     Button btnCloseIt = (Button) dialog.findViewById(R.id.btnClose); 
     // if button is clicked, close the custom dialog 
     btnCloseIt.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       dialog.dismiss(); 
      } 
     }); 
     dialog.show(); 
+0

Когда вы вызываете b.create(), вам возвращается AlertDialog. Сохраните ссылку на диалог AlertDialog = b.create(); , Затем вызовите dialog.show(). Затем вы можете вызвать dialog.dismiss(); – dymmeh

+0

Где я могу вызвать метод прослушивателя кнопок? – Si8

ответ

2

Как уже указывали другие, b является ссылкой на AlertDialog.Builder, а не на Dialog. AlertDialog.Builder класс не имеет метода с именем dismiss(). Сохраните ссылку на Dialog, который возвращается вам, когда вы вызываете create() или show() метод от AlertDialog.Builder класс.

Еще одна вещь, поскольку вы одновременно вызываете create() и show() методов, вы действительно хотите назвать оба метода? Я считаю, что для вас здесь будет достаточно всего лишь метода show(). From Developer Reference public AlertDialog show() : Creates a AlertDialog with the arguments supplied to this builder and show()'s the dialog.

+0

Если вы так выразились, это имеет смысл. Позвольте мне поработать над этим и обновить всех. – Si8

1

Вы должны хранить результат вызова b.create(); это то, что вам нужно назвать dismiss().