Android: диалог закрывается без звонка

1

У меня есть диалог, который выполняет некоторую проверку (ниже). Проблема заключается в том, что диалог отклоняется после отображения Тоста, без которого я вызываю увольнение. Мне нужно показать тост и сохранить диалог открытым для исправления ошибки.

final EditText txtName = new EditText(this);
AlertDialog.Builder dlgAdd = new AlertDialog.Builder(this)
    .setTitle(R.string.create_category)
    .setMessage(R.string.name)
    .setView(txtName)
    .setPositiveButton(R.string.ok, new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String newCatName = txtName.getText().toString().trim(); // Converts the value of getText to a string.
            if (newCatName != null && newCatName .length() ==0)
            {  
                Toast.makeText(ManageCategories.this, R.string.err_name_required, 3500).show();

            } else {
                try {
                    boolean alreadyExists = mDatabaseAdapter.getCategoryIDs(newCatName).length > 0;// ids of cats with this name
                    if(alreadyExists) {
                        Toast.makeText(ManageCategories.this, R.string.categoryAlreadyExists, 3500).show();
                    } else {
                        mDatabaseAdapter.addCategory(newCatName);
                    }
                }catch(Exception ex){
                    Toast.makeText(ManageCategories.this, R.string.error+':'+ ex.getLocalizedMessage(), 3500).show();
            }
            }
        }
    }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
});
dlgAdd.show();
  • 1
    Вы помните, как это было решено? Принятый ответ не помогает: на этой конкретной странице вы можете прочитать. Когда пользователь касается любой из кнопок действий, созданных с помощью AlertDialog.Builder, система закрывает диалоговое окно для вас. в соответствии с этим должно быть невозможно сохранить диалоговое окно, отображающее onPositiveClick.
Теги:
validation
alert
dialog

2 ответа

1
Лучший ответ

Я предполагаю, что вы не создаете и не показываете диалог, как указано в документах Android здесь http://developer.android.com/guide/topics/ui/dialogs.html, используя функции OnCreateDialog

Пожалуйста, сделайте так, как указано в документах, и сообщите нам, если он все еще не работает.

  • 0
    Верный. Работал, но мне нужно было сделать диалоговый класс многократного использования.
  • 0
    AlertDialog.Builder create () developer.android.com/reference/android/app/… вместо show () может использоваться с тем же эффектом в коде, который вы поместили выше, не создавая повторно используемый класс диалога.
Показать ещё 1 комментарий
1

Я думаю, что все, чего вы пытаетесь достичь, невозможно с AlertDialog.bilder вместо этого вы можете сделать

  • объект диалога.
  • Установите свой макет для своего диалога.
  • Установите соответствующий прослушиватель.

Пример.

dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent" android:orientation="vertical">

<EditText 
            android:layout_height="wrap_content" 
            android:id="@+id/EditText01" android:layout_width="300dip" android:ellipsize="none"/>

<LinearLayout 
        android:id="@+id/LinearLayout01" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">

        <Button 
                android:id="@+id/Button01" 
                android:layout_height="wrap_content" 
                android:text="Yes" 
                android:layout_width="100dip"/>

        <Button 
                android:id="@+id/Button02" 
                android:layout_height="wrap_content" 
                android:text="No" 
                android:layout_width="100dip"/>
</LinearLayout>

  </LinearLayout>

Help.java

public class Help extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    d =  new Dialog(Help.this,
            android.R.style.Theme_InputMethod);

    createMyDialog();
}
  private Dialog d;
private void createMyDialog() {
    d.setContentView(R.layout.dialog_view);
    Button b1 = (Button)findViewById(R.id.Button01);
    Button b2 = (Button)findViewById(R.id.Button02);
    EditText t = (EditText) findViewById(R.id.EditText01);
    OnTouchListener listner1 = null;
    OnTouchListener listner2 = null;
    b1.setOnTouchListener(listner1);
    b2.setOnTouchListener(listner2);
    listner1 = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return false;
        }
    };
    listner2 = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return false;
        }
    };
            d.show();
}

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню