アラートダイアログを閉じることができません。ダイアログを作成するためにレイアウトインフレータを使用しているので、それを使い終わった後に物を閉じる方法についてはわかりません。コードは次のとおりです。
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//Need this to close the alert dialog box
}
});
title.setText(workout_items[position]);
dialog.setView(layout);
dialog.show();
Finishを呼び出すことはできません。これにより、アラートダイアログが起動されるリストビューが閉じられ、dialog.dismiss呼び出しが利用できなくなります。
これを修正するにはどうすればいいと思いますか?
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
title.setText(workout_items[position]);
dialog.setView(layout);
AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
alertDialog.dismiss();
}
});
alertDialog.show();
このようにします
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
dialog.dismiss();
}
});
これを試して:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.brush_opts_dialog,null);
builder.setView(dialogView);
closeBtn = (Button)dialogView.findViewById(R.id.close_btn);
final AlertDialog dialog = builder.create();
closeBtn .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
AlertDialog.Builderを使用して、アラートダイアログ自体を「構築」する必要があります。次に、AlertDialog.Builderオブジェクトでcreate()メソッドを呼び出します。このメソッドは、alertDialogオブジェクトを返します。これにより、dismiss()を呼び出すことができます。
複数回作成する必要も、DialogInterfaceオブジェクトを使用する必要もありません。これは私のために動作します。それがあなたにどのように役立つか教えてください。
コードPLZチェックを変更しました。
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();
//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);
TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);
final AlertDialog Dial = alertDialog.create();
title.setText(workout_items[position]);
Dial.setView(layout);
AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Dial.dismiss();
}
});
Dial.show();
追加しただけ
final AlertDialog Dial = alertDialog.create(); dialog.setView(layout);をDial.setView(layout);に変更します
onclickリスナーでDial.dismiss();を呼び出すだけです。
クラスでこのコードを使用します。
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
((Button) dialog.findViewById(R.id.button))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
そしてcustom.xmlを作成し、その中にこのコードを貼り付けます:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text=" Ok "/>
</RelativeLayout>
ソース: https://www.mkyong.com/Android/android-custom-dialog-example/
上記のコードが気に入らない場合は、以下のリンクを参照してください: http://thedeveloperworldisyours.com/Android/prevent-alertdialog-closing-button-clicked/
View.OnClickListenerではなく、DialogInterface.OnClickListenerを実装する必要があります。次に、dialog.dismiss()が使用可能になります。
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
dialog.dismiss();
}
}
エラーが発生しました。このコードを試してください
dialog.setView(layout);
final AlertDialog alertDialog = dialog.create();
add_item.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
if (alertDialog != null && alertDialog.isShowing()) {
alertDialog.dismiss();
}
}
});
alertDialog.show();
Dialog.cancel()を試してください。 onclickリスナーで。動作するはずです。