Java 为什么调用dialog.show()会导致错误?
在活动中,我运行alertdialog,应用程序中出现错误。之后,应用程序关闭。在这个论坛上,我发现了一个类似的问题。建议添加onDestroy()方法: 我补充说,但可能是错的,因为我只是在学习,不太懂。onDestroy()以红色点亮。如何正确地编写代码Java 为什么调用dialog.show()会导致错误?,java,android,Java,Android,在活动中,我运行alertdialog,应用程序中出现错误。之后,应用程序关闭。在这个论坛上,我发现了一个类似的问题。建议添加onDestroy()方法: 我补充说,但可能是错的,因为我只是在学习,不太懂。onDestroy()以红色点亮。如何正确地编写代码 import public class ActivityBox_4 extends AppCompatActivity { SharedPreferences sp; @Override protected void onCreate
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)
导入
公共类活动Box_4扩展了AppCompatActivity{
共享参考sp;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u box\u 4);
sp=GetSharedReferences(“应用程序数据”,0);
SharedReferences sp=GetSharedReferences(“应用程序数据”,0);
TextView Moltext27=findViewById(R.id.Moltext27);
字符串text27=“
”+”\t\t\tМЛСЯЯЯЯЯЯЯЯЯ)
+
“\t\t\tбб,бббббб/бббббббб(іжббж),
”;
Moltext27.setTextSize(TypedValue.COMPLEX_UNIT_SP,SP.getInt(“size”,18));
setText(Html.fromHtml(text27));
TextView Moltext28=findViewById(R.id.Moltext28);
字符串text28=“\t\t\tМСЛСЯСЛЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮЮ+
“\t\t\tСааааааааа、іЮаЮа、іЮЮЮЮЮЮ、іііЮЮЮЮ;
Moltext28.setTextSize(TypedValue.COMPLEX_UNIT_SP,SP.getInt(“size”,18));
setText(Html.fromHtml(text28));
最终ScrollView ScrollView=findViewById(R.id.scroll_2);
按钮移动=findViewById(R.id.butM_27);
按钮移动=findViewById(R.id.butM_28);
move_27.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
scrollView.postDelayed(新的Runnable(){
公开募捐{
scrollView.scrollTo(0,(int)findViewById(R.id.Moltext27.getY());
}
}, 100);
}
});
move_28.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
scrollView.postDelayed(新的Runnable(){
公开募捐{
scrollView.scrollTo(0,(int)findViewById(R.id.Moltext28.getY());
}
}, 100);
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共布尔onKeyDown(int-keyCode,KeyEvent事件){
if(keyCode==KeyEvent.keyCode\u HOME){
返回true;
}
返回super.onKeyDown(keyCode,event);
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
如果(id==R.id.С蹄尺寸){
AlertDialog.Builder=新建AlertDialog.Builder(此);
建筑商名称(“бззЮзіЮзЮЮЮзЮЮЮЮЮ;
最终字符串[]大小={“16”、“18”、“20”、“22”、“24”、“26”};
int selected_item=-1;
开关(sp.getInt(“大小”,-1)){
案例16:
所选项目=0;
打破
案例18:
所选项目=1;
打破
案例20:
所选项目=2;
打破
案例22:
所选项目=3;
打破
案例24:
所选项目=4;
打破
案例26:
所选项目=5;
打破
}
setSingleChoiceItems(大小、选定的_项、新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(对话框接口对话框,int项){
开关(项目){
案例0:
sp.edit().putInt(“大小”,16).apply();
重新创建();
打破
案例1:
sp.edit().putInt(“大小”,18.apply();
重新创建();
打破
案例2:
sp.edit().putInt(“大小”,20).apply();
重新创建();
打破
案例3:
sp.edit().putInt(“大小”,22).apply();
重新创建();
打破
案例4:
sp.edit().putInt(“大小”,24.apply();
重新创建();
打破
案例5:
sp.edit().putInt(“大小”,26).apply();
重新创建();
打破
}
}
});
setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
AlertDialog=builder.create();
dialog.show();
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
受保护的空onDestroy()
{
super.ondestory();
if(dialog!=null&&dialog.isShowing()){
dialog.dismise();
}
}
}
2019-08-12 13:45:03.966 15878-15878/ua.pl.ragerbook E/WindowManager:android.view.WindowLeaked:Activity ua.pl.ragerbook.old_unused.ActivityBox_4已泄漏窗口DecorView@b946dac[]最初添加到此处的
在android.view.ViewRootImpl。(ViewRootImpl.java:417)
位于android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:331)
在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
在android.app.Dialog.show上(Dialog.java:316)
在ua.pl.prayerbook.old_unused.Activi
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.cancel();
}
});
builder.show();
public class ActivityBox_4 extends AppCompatActivity {
SharedPreferences sp;
AlertDialog.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_box_4);
builder = new AlertDialog.Builder(this);
}
private AlertDialog mDialog;
public AlertDialog.Builder createDialog() {
AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
builder.setTitle(R.string.CONTACTDETAIL__status_offline)
.setMessage(R.string.CONNECTION_BANNER__text)
.setPositiveButton(R.string.GENERIC__ok, (dialog, which) -> mPresenter.connectionDialogClosed());
builder.setCancelable(false);
return builder;
}