как исправить ошибку диалога с помощью recycleview?

#android #dialog #android-recyclerview #android-alertdialog

#Android #диалог #android-recyclerview #android-alertdialog

Вопрос:

Я настраиваю диалоговое окно в адаптере рециркуляции, но оно выдает ошибку.

android.view.WindowManager $ BadTokenException: невозможно добавить окно — токен null не для приложения.

Я много ищу, но во всех ответах говорится, что измените контекст на getActivity, но в recycle adapter у меня нет такого выбора.

Я много искал в Google и stack overflow, но не нашел решения

 @NonNull
@Override
public StopRecycleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=LayoutInflater.from(context1).inflate(R.layout.bus_recycle_lyout,viewGroup,false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final StopRecycleAdapter.MyViewHolder viewHolder, int i) {
    item1=item.get(i);
    viewHolder.stop.setText(item1.getStop());
    viewHolder.stop_serial.setText(item1.getStopTitle());
    mdialog=new Dialog(context1);
    mdialog.setContentView(R.layout.update_stop_dialog);
    mdialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    viewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try{
                EditText update_stop=mdialog.findViewById(R.id.update_stop);
                update_stop.setText("hlw");
                mdialog.show();
            }catch (Exception e){
                Toast.makeText(context1,"error  " e,Toast.LENGTH_SHORT).show();

            }
        }
    });
}

@Override
public int getItemCount() {
    return item.size();
}
 

Я ожидаю, что диалоговое окно откроется, когда пользователь нажмет на recycleview.

Комментарии:

1. Пожалуйста, правильно отформатируйте код

Ответ №1:

Вы можете проверить это так, где вы получаете исключение

 if (alertDialog != null amp;amp; alertDialog.isVisible()) {
}
 

или

 if(!context.isFinishing()){

  builder.show();
}