OnClickListener внутри настраиваемого alertdialog Android

Я начинающий учитель и ценю терпение! Благодаря!

В Eclipse я создал специальный alertdialog со своим собственным XML-файлом («custom_dialog»), и он называется «usernamealert».

Я хочу, чтобы предупреждение всплывало, если пользователь еще не ввел имя пользователя (то есть username.length == 0).

Внутри этого макета у меня есть textView («Как ваше имя?»), EditText и кнопка («usernameButton»).

Перед тем, как вставить onclicklistener для кнопки, все сработало. Это была моя (релевантная) Java:

LayoutInflater inflater = getLayoutInflater(); View dialoglayout = inflater.inflate(R.layout.custom_dialog, (ViewGroup) getCurrentFocus()); AlertDialog.Builder usernamebuilder = new AlertDialog.Builder(this); usernamebuilder.setView(dialoglayout); AlertDialog usernamealert = usernamebuilder.create(); 

Когда я включил onclicklistener, он сломался! Где я должен это поставить?

(Вот что я пробовал … все в моем OnCreate)

 LayoutInflater inflater = getLayoutInflater(); View dialoglayout = inflater.inflate(R.layout.custom_dialog, (ViewGroup)getCurrentFocus()); AlertDialog.Builder usernamebuilder = new AlertDialog.Builder(this); usernamebuilder.setView(dialoglayout); Button usernameButton = (Button) usernamealert.findViewById(R.id.usernameButton); usernameButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //store username in sharedprefs usernamealert.dismiss(); } }); 

После кода я сказал:

 if (username.length() == 0) { usernamealert.show(); } 

Опять же, это сработало, прежде чем я начал возиться с кнопкой!

Необходимо указать, где код будет искать кнопку, если ее единственный «findViewById», который он будет искать в xml хоста, должен быть

 LayoutInflater inflater =getLayoutInflater(); View myview = inflater.inflate(R.layout.dialoghireteachernegotiate, null); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout builder.setView(myview); Button addS = (Button) myview.findViewById (R.id.bAddS); 

Это часть моего класса, Hireteachernegotiate.class, который имеет макет rentteachernegotiate.xml

  AlertDialog.Builder builder = new AlertDialog.Builder(this); // Get the layout inflater LayoutInflater inflater =getLayoutInflater(); View myview = inflater.inflate(R.layout.dialoghireteachernegotiate, null); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout builder.setView(myview); Button addS = (Button) myview.findViewById (R.id.bAddS); addS.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //do some stuff } }); Button minusS = (Button) myview.findViewById (R.id.bMinusS); addS.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //do other stuff } }); // Add action buttons builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.show(); 

Это диалоговое окно

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/bAddS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/bMinusS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

Попробуй это.

 usernamebuilder.setCancelable(false) usernamebuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //do what you want. } }); 

Посмотрите, работает ли это, или если это помогает в некотором роде.