Каждый раз, когда отображается AlertDialog
, приложение закрыто или уничтожено. Я получаю эту ошибку в logcat has leaked window
. Я знаю, что при использовании метода onDestroy()
ниже удаляется эта ошибка, но это работает только в том случае, если внутри операции находится AlertDialog
. Однако в моем случае я использую AlertDialog
внутри адаптера, который показан на коде нижеотклонить AlertDialog внутри адаптера при закрытии приложения
@Override
public void onDestroy(){
super.onDestroy();
if(alertDialog != null && alertDialog.isShowing()) {
alertDialog.cancel();
}
}
LogCat Ошибка.
Activity com.test.example.MovieList has leaked window
com.android.internal.policy.impl.PhoneWindow$DecorView{1ed0b473 V.E..... R.......
0,0-1080,543} that was originally added here at android.view.ViewRootImpl.<init>
(ViewRootImpl.java:363)
адаптер
public class MyAdapter extends RecyclerView.Adapter <MyAdapter.ViewHolder>{
private List<Movies> moviesList;
private Context mContext;
AlertDialog alertDialog;
public MyAdapter (Context context, List<Movies> list) {
mContext = context;
moviesList= list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
mContext = parent.getContext();
View view = View.inflate(parent.getContext(), R.layout.movies, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int viewType) {
final Movies movies = moviesList.get(holder.getAdapterPosition());
final String id = movies.getId()
holder.title.setText(movies.getTitle());
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.AppCompatAlertDialogStyle);
builder.setTitle(R.string.dialog_title);
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
moviesList.remove(holder.getAdapterPosition());
DBHelper db = new DBHelper (mContext);
db.deleteMovie(movie);
notifyDataSetChanged();
db.close();
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog = builder.create();
alertDialog.show();
return false;
}
});
}
@Override
public int getItemCount() {
return (moviesList != null? moviesList.size():0);
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView title;
ViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.movie_title);
}
}
}
@Override общественного недействительными OnPause() { super.onPause(); if (alertDialog! = Null && alertDialog.isShowing()) { alertDialog.cancel(); } } Надеюсь, это поможет вам –
Создайте экземпляр Dialog в действии и передайте его в Adapter. Затем вы можете использовать 'увольнение' в Activity. – TruongHieu