Диалоговое окно не отображается
Я использую следующий код:
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;
}
}
надеюсь, что это помогает.
У меня была как-то похожая проблема, в моем случае диалог появится и исчезнет в миллисекундах: чтобы решить ее, не вызывайте 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;
}
}