2013-08-21 9 views
19

У меня есть AlertDialog с положительными и отрицательными кнопками. В макете AlertDialog у меня есть EditText и две кнопки (btnAdd1, btnAdd2). Я хочу, когда пользователь нажимает на кнопку btnAdd1 или btnAdd2, добавляет тот же текст в EditText в AlertDialog (но не закрывает AlertDialog). Возможно ли это в AlertDialog, или мне нужно использовать только Dialog?Как я могу добавить пользовательские кнопки в макет AlertDialog?

Это расположение (R.layout.prompt) из AlertDialog:

<LinearLayout> 
<EditText 
    android:id="@+id/userInput" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="text" > 

    <requestFocus /> 
</EditText> 

<Button 
    android:id="@+id/btnAdd1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="bla" /> 

<Button 
    android:id="@+id/btnAdd2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="bla" /> 

    </LinearLayout> 

И это исходный код:

LayoutInflater layoutInflater = LayoutInflater.from(this); 
     View promptView = layoutInflater.inflate(R.layout.prompt, null); 

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
    alertDialogBuilder.setView(promptView); 
    alertDialogBuilder 
      .setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
           //... 

       } 
      }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 

    AlertDialog alertD = alertDialogBuilder.create(); 
    alertD.show(); 

Я хочу, чтобы получить доступ ко в btnAdd1 и btnAdd2 от макета. Установите OnClickListener() на эти две кнопки.

+1

Что вы сделали до сих пор? –

+0

Непонятно, что вы просите. – Vikram

+0

Да ... это возможно .. Нарисуйте свой код здесь. – Piyush

ответ

35

Следующий код будет раздувать вид из R.layout.prompt и установите его на AlertDialog. Кнопки positive и negative не будут использоваться. Вы можете установить onClick поведения для btnAdd1 и btnAdd2:

LayoutInflater layoutInflater = LayoutInflater.from(this); 
View promptView = layoutInflater.inflate(R.layout.prompt, null); 

final AlertDialog alertD = new AlertDialog.Builder(this).create(); 

EditText userInput = (EditText) promptView.findViewById(R.id.userInput); 

Button btnAdd1 = (Button) promptView.findViewById(R.id.btnAdd1); 

Button btnAdd2 = (Button) promptView.findViewById(R.id.btnAdd2); 

btnAdd1.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

     // btnAdd1 has been clicked 

    } 
}); 

btnAdd2.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

     // btnAdd2 has been clicked 

    } 
}); 

alertD.setView(promptView); 

alertD.show(); 
4

что вы хотите сделать;

alertD.show(); 
Button button = (Button)promptView.findViewById(R.id.buttonId); 
button.setOnClickListener(....) 

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

+0

Это не значит, что мне нужно. Я вставил свой код. Посмотрите, пожалуйста. Я не хочу устанавливать положительную или отрицательную кнопку (у меня уже установлены эти положительные и отрицательные кнопки). –

+1

@Pepa, я понятия не имею, я пытался это сделать один раз, я не справился с этим, но мне кажется логичным сделать кнопку Button Button = (Button) promptView.findViewById (R.id.buttonId) ; 'и затем установить прослушиватель кликов после вызова' d.show() '. – jcw

+0

да! это он, я искал какое-то сложное решение, но это работает, THX! –

-2

Вы могли бы попробовать что-то вроде этого:

dialog.setPositiveButton(R.string.positive, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 
     dialog.show(); 
    } 
}); 
+3

, это не значит, что мне нужно. Я вставил свой код. Посмотрите, пожалуйста. Я не хочу устанавливать положительную или отрицательную кнопку. –

1

Согласно этому подходу, я могу создать изображение кнопки, но если я хочу, чтобы закрыть или отменить диалоговое окно на кнопку Отмена, то, что я должен делать ..

public static void alertDialogShow(final Context context, 
      final String resultMobile) { 

     LayoutInflater li = LayoutInflater.from(context); 
     View promptsView = li.inflate(R.layout.prompt, 
       null); 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
       context, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 
     // set prompts.xml to alertdialog builder 
     alertDialogBuilder.setView(promptsView); 
     final EditText userInput = (EditText) promptsView 
       .findViewById(R.id.editTextDialogUserInput); 
     userInput.setText(resultMobile); 
     userInput.setEnabled(false); 
btnCancel.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

      } 
     }); 
0

Мое решение по вашему вопросу.

LayoutInflater layoutInflater = LayoutInflater.from(this); 
View promptView = layoutInflater.inflate(R.layout.prompt, null); 

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); 
alertDialogBuilder.setView(promptView); 

Button btn_1= (Button)promptView.findViewById(R.id.btnAdd1); 
btn_1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      //do required function 
      // don't forget to call alertD.dismiss() 

     } 
    }); 


Button btn_2 = (Button)promptView.findViewById(R.id.btnAdd2); 
btn_2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      //do required function 

     } 
    }); 


alertDialogBuilder 
     .setCancelable(false) 



AlertDialog alertD = alertDialogBuilder.create(); 
alertD.show();