In activity, I run alertdialog and an error occurs in my application. After which the application closes. In this forum I found a similar problem. Advised to add the onDestroy() method: Activity has leaked window that was originally added
I added, but probably wrong, because I am only learning and do not understand much. onDestroy() is lit in red. How can I write the code correctly?
import
public class ActivityBox_4 extends AppCompatActivity {
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_box_4);
sp = getSharedPreferences("app_data", 0);
SharedPreferences sp = getSharedPreferences("app_data",0);
TextView Moltext27 = findViewById(R.id.Moltext27);
String text27 ="<br />" + "<b>\t\t\tМОЛИТВА ДО СВЯТОГО (СВЯТОЇ)</b><br />"+
"\t\t\tДо тебе, о святий угодниче Божий/ <i>свята угоднице Божа (ім’я), <br />";
Moltext27.setTextSize(TypedValue.COMPLEX_UNIT_SP,sp.getInt("size",18));
Moltext27.setText(Html.fromHtml(text27));
TextView Moltext28 = findViewById(R.id.Moltext28);
String text28 = "<b>\t\t\tМОЛИТВА ЗА ТИХ, КОГО ПЕРЕСЛІДУЮТЬ ЗА ВІРУ ПРАВОСЛАВНУ</b><br />"+
"\t\t\tСпаси, Господи, і помилуй старців і молодих, нужденних і сиріт і тих, <br />";
Moltext28.setTextSize(TypedValue.COMPLEX_UNIT_SP,sp.getInt("size",18));
Moltext28.setText(Html.fromHtml(text28));
final ScrollView scrollView = findViewById(R.id.scroll_2);
Button move_27 = findViewById(R.id.butM_27);
Button move_28 = findViewById(R.id.butM_28);
move_27.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scrollView.postDelayed(new Runnable() {
public void run() {
scrollView.scrollTo(0, (int) findViewById(R.id.Moltext27).getY());
}
}, 100);
}
});
move_28.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
scrollView.postDelayed(new Runnable() {
public void run() {
scrollView.scrollTo(0, (int) findViewById(R.id.Moltext28).getY());
}
}, 100);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.Сhoose_Size) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Оберіть розмір тексту");
final String[] sizes = {"16", "18", "20", "22", "24", "26"};
int selected_item = -1;
switch (sp.getInt("size", -1)) {
case 16:
selected_item = 0;
break;
case 18:
selected_item = 1;
break;
case 20:
selected_item = 2;
break;
case 22:
selected_item = 3;
break;
case 24:
selected_item = 4;
break;
case 26:
selected_item = 5;
break;
}
builder.setSingleChoiceItems(sizes, selected_item, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0:
sp.edit().putInt("size", 16).apply();
recreate();
break;
case 1:
sp.edit().putInt("size", 18).apply();
recreate();
break;
case 2:
sp.edit().putInt("size", 20).apply();
recreate();
break;
case 3:
sp.edit().putInt("size", 22).apply();
recreate();
break;
case 4:
sp.edit().putInt("size", 24).apply();
recreate();
break;
case 5:
sp.edit().putInt("size", 26).apply();
recreate();
break;
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy()
{
super.onDestroy();
if (dialog!=null && dialog.isShowing()){
dialog.dismiss();
}
}
}
2019-08-12 13:45:03.966 15878-15878/ua.pl.prayerbook E/WindowManager: android.view.WindowLeaked: Activity ua.pl.prayerbook.old_unused.ActivityBox_4 has leaked window DecorView@b946dac[] that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:417)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.app.Dialog.show(Dialog.java:316)
at ua.pl.prayerbook.old_unused.ActivityBox_4.onOptionsItemSelected(ActivityBox_4.java:171)
at android.app.Activity.onMenuItemSelected(Activity.java:3204)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:436)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:196)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
at android.support.v7.app.AppCompatDelegateImpl.onMenuItemSelected(AppCompatDelegateImpl.java:888)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
at android.support.v7.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1155)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3120)
at android.widget.AbsListView.onTouchUp(AbsListView.java:4047)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3806)
at android.support.v7.widget.DropDownListView.onTouchEvent(DropDownListView.java:217)
at android.support.v7.widget.MenuPopupWindow$MenuDropDownListView.onTouchEvent(MenuPopupWindow.java:129)
at android.view.View.dispatchTouchEvent(View.java:9943)
at android.view.ViewGroup.dispatchTransformedTouchEvent
(ViewGroup.java:2663)