Диалоговое окно не отображается

Я использую следующий код:

public class Settings extends Activity implements OnClickListener {

    private Activity activity;
    private AlertDialog.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.settings);

        Button bAdd = (Button) findViewById(R.id.bAdd);
        bAdd.setOnClickListener(this);

        activity = this;
        builder = new AlertDialog.Builder(activity);
        builder.setMessage("message")
           .setTitle("title");

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            AlertDialog dialog = builder.create();
            break;
        }

    }


}

но по какой-то причине мое всплывающее окно не появляется и ничего не делает.. Есть идеи, что вызывает эту неисправность? Спасибо!

5 ответов


нужно позвонить show() вместо create().

Примечание: create() метод создает только экземпляр Dialog но он не покажет его.

одно предложение:

вы можете создать метод, который возвращает Dialog такой:

public Dialog createNewDialog(int type) {
   AlertDialog dlg = null;
   switch (type) {
      case SOME_CONSTANT:
         dlg = new AlertDialog.Builder(ActivityName.this / this)
            .setTitle("Title")
            .setMessage("Message")
            .setPositiveButton("Yes", null)
            .create();
      break;
   }
}

тогда вы можете назвать это как:

createNewDialog(SOME_CONSTANT).show();

и свой Dialog будет показано.

особенно в вашем случае вы можете достичь своей цели с помощью следующего фрагмента код:

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            createNewDialog(SOME_CONSTANT).show();
            break;
        }
    }

надеюсь, что это помогает.


вам нужно позвонить ' builder.шоу.`)(


У меня была как-то похожая проблема, в моем случае диалог появится и исчезнет в миллисекундах: чтобы решить ее, не вызывайте finish() или finishActivity() в том же методе, который вызывает ваш диалог.

createNewDialog(SOME_CONSTANT).show();
finish();

это уничтожает ваш диалог еще до доступа к нему.


У меня есть эта проблема, и, возможно, этот ответ может помочь кому-то.

я запускал код, чтобы показать AlertDialog в потоке без пользовательского интерфейса. После использования:

runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
            ShowAlert();
        }
    });

в AlertDialog работал.


причина, по которой он не показывает, что .show() не был вызван на AlertDialog

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bAdd:
            AlertDialog dialog = builder.create();
            dialog.show();
            break;
        }

    }