以下の次のコードで、アラートボックスを閉じるにはどうすればよいですか?メモリリークを引き起こしたくありません。 alertDialogで.dismiss()を試しましたが、うまくいきませんでした...ありがとう
// User pressed the stop button
public void StopMsg_button_action(View view){
final EditText password_input = new EditText(this); // create an text input field
password_input.setHint("Enter Password"); // put a hint in it
password_input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // change it to password type
AlertDialog.Builder alertDialog = new Builder(this); // create an alert box
alertDialog.setTitle("Enter Password"); // set the title
alertDialog.setView(password_input); // insert the password text field in the alert box
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { // define the 'OK' button
public void onClick(DialogInterface dialog, int which) {
String entered_password = password_input.getText().toString();
if (entered_password.equals(my_password)) {
locManager.removeUpdates(locListener); // stop listening for GPS coordinates
startActivity(new Intent(Emergency_1Activity.this,Main_MenuActivity.class)); // go to main menu
} else {
alert("Incorrect Password");
}
}
});
alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show(); // show the alert box
}
Dismiss()でうまくいかなかったのは何ですか?
Dialog.dismiss() 、または Dialog.cancel() のいずれかを使用できるはずです。
alertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { // define the 'Cancel' button
public void onClick(DialogInterface dialog, int which) {
//Either of the following two lines should work.
dialog.cancel();
//dialog.dismiss();
}
});
次のコードを使用すると、ListBox AlertDialogを表示でき、アイテムを押すとダイアログが閉じます。コードの順序は重要です。
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
String names[] ={"A","B","C","D"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,Android.R.layout.simple_list_item_1,names);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View)inflater.inflate(R.layout.list_layout, null);
ListView lv = (ListView) convertView.findViewById(R.id.listView1);
lv.setAdapter(adapter);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
final AlertDialog ad = alertDialog.show();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//Toast.makeText(mContext, position, Toast.LENGTH_LONG).show();
ad.dismiss();
}
});
コードは非常に簡単です。
final AlertDialog show = alertDialog.show();
最後にボタンのアクションで:
show.dismiss();
たとえば、カスタムアラートダイアログの場合:
Javaのコードでは、オブジェクトAlertDialogを作成できます。
public class ViewAlertRating {
Context context;
public ViewAlertRating(Context context) {
this.context = context;
}
public void showAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View alertView = inflater.inflate(R.layout.layout_test, null);
alertDialog.setView(alertView);
final AlertDialog show = alertDialog.show();
Button alertButton = (Button) alertView.findViewById(R.id.btn_test);
alertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
show.dismiss();
}
});
}
}
コードXML layout_test.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Valoración"
Android:id="@+id/text_test1"
Android:textSize="20sp"
Android:textColor="#ffffffff"
Android:layout_centerHorizontal="true"
Android:gravity="center_horizontal"
Android:textStyle="bold"
Android:paddingTop="10dp"
Android:paddingBottom="10dp"
Android:background="#ff37dabb"
Android:paddingLeft="20dp"
Android:paddingRight="20dp" />
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:paddingLeft="20dp"
Android:paddingRight="20dp"
Android:layout_marginTop="15dp">
<EditText
Android:layout_width="match_parent"
Android:layout_height="120dp"
Android:id="@+id/edit_test"
Android:hint="Descripción"
Android:textColor="#aa000000"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
Android:textColorHint="#aa72777a"
Android:gravity="top" />
</LinearLayout>
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center_horizontal"
Android:paddingTop="10dp"
Android:paddingLeft="15dp"
Android:paddingRight="15dp"
Android:paddingBottom="15dp" >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:weightSum="1.00"
Android:gravity="right" >
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Enviar"
Android:id="@+id/btn_test"
Android:gravity="center_vertical|center_horizontal"
Android:textColor="#ffffffff"
Android:background="@drawable/btn_flat_blue_selector" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
最後に、アクティビティを呼び出します:
ViewAlertRating alertRating = new ViewAlertRating(this);
alertRating.showAlert();
ボタンを配置せず、textviewと言うカスタムレイアウトを使用し、textviewのクリック時にアラートダイアログを閉じる場合は、この方法を使用する必要があります。
AlertDialog alertDialog = builder.show();
それからチェック
if(alertDialog != null && alertDialog.isShowing()){
alertDialog.dismiss();
}
これは、何らかの条件を確認した後、アクティビティのどこかで却下したい場合にも当てはまります。
このメソッドは、必要なコードをデモします.. Namrataの以前の回答から
@SuppressLint("InflateParams")
private static void showDialog(Activity activity, int layoutId)
{
LayoutInflater inflater = activity.getLayoutInflater();
View dialoglayout = inflater.inflate(layoutId, null);
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setView(dialoglayout);
CustomDialog.doCustomLogic(activity, layoutId, dialoglayout);
final AlertDialog alertDialog = builder.show();
// caller assumes there will be a btn_close element present
Button closeNowBtn = (Button) dialoglayout.findViewById(R.id.btn_close);
closeNowBtn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
alertDialog.dismiss();
}
});
}
Createメソッドをオーバーライドして、ダイアログインスタンスを保存するだけです。その後、解雇を呼び出すことができます
@Override
public AlertDialog create() {
this.dialog = super.create();
return this.dialog;
}
コードのどこかに:
dialog.dismiss();
_AlertDialog.Builder
_を閉じるまたはキャンセルするには
_dialog.setNegativeButton("إلغاء", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss()
}
});
_
ダイアログインターフェイスでdismiss()
を呼び出す必要があります。
_alertDialog.setNeutralButton
_の代わりに_alertDialog.setNegativeButton
_を使用してください。 dialog.cancel()
はAlertダイアログで使用できるメソッドではないため、dialog.dismiss()
を使用します。
私はこれを試して働いた!
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
alertDialog.setCancelable(true);
}
});