Всем привет, у меня есть адаптер и там или уже в моделе я пытаюсь вывести диалог чтобы подтвердить или удалить действие пользователя но постоянно вылетает ошибка, в гугле нашел лишь кучу похожиш вещей в которых написано использовать getapplicationContext() - но это не помогает какой-бы контекст я не вызвал. Подскажите пожалуйста как решить проблему, вот код адаптера и ошибки:
public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ContactViewHolder> {
private Context context;
private List<Item> itemList;
private SavedModel savedModel;
public ContactAdapter(Context context, List<Item> itemList, SavedModel savedModel) {
this.context = context;
this.itemList = itemList;
this.savedModel = savedModel;
}
@NonNull
@Override
public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new ContactViewHolder(LayoutInflater.from(context).inflate(R.layout.item_search_contact, viewGroup, false));
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull ContactViewHolder contactViewHolder, @SuppressLint("RecyclerView") final int position) {
contactViewHolder.setIsRecyclable(false);
contactViewHolder.tvContactName.setText(itemList.get(position).getLastname() + " " + itemList.get(position).getFirstname());
contactViewHolder.tvContactDescription.setText(itemList.get(position).getPlaceOfWork());
contactViewHolder.imgSave.setOnClickListener(view -> {
View view1 = LayoutInflater.from(context).inflate(R.layout.message_dialog, null);
AlertDialog.Builder dialog = new AlertDialog.Builder(context.getApplicationContext()).setTitle("123").setView(view1);
dialog.show();
//= new AlertDialog.Builder(context)
//.setTitle("Зберегти в обраних?")
// .setView(view1);
//.setPositiveButton(R.string.yes, (dialogInterface, i) -> savedModel.addObject(itemList.get(position)))
//.setNegativeButton(R.string.cancel, (dialogInterface, i) -> Toast.makeText(context, "Додавання відмінено!", Toast.LENGTH_SHORT).show())
//.show();
});
contactViewHolder.imgOpenPdf.setOnClickListener(view -> openPdfByLink(itemList.get(position).getLinkPDF()));
}
@Override
public int getItemCount() {
return itemList.size();
}
private void openPdfByLink(String link){
Intent intent = new Intent(context, SearchActivity.class);
intent.putExtra("link", link);
context.startActivity(intent);
}
public class ContactViewHolder extends RecyclerView.ViewHolder{
private TextView tvContactName, tvContactDescription;
private ImageView imgOpenPdf, imgSave;
public ContactViewHolder(@NonNull View itemView) {
super(itemView);
tvContactDescription = itemView.findViewById(R.id.tvContactDescription);
tvContactName = itemView.findViewById(R.id.tvContactName);
imgOpenPdf = itemView.findViewById(R.id.imvOpenPdf);
imgSave = itemView.findViewById(R.id.imvAddToLike);
}
}
}
Вот код ошибки:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.divinkas.searchcontacts, PID: 4074
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:644)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at android.app.AlertDialog$Builder.show(AlertDialog.java:951)
at com.example.divinkas.searchcontacts.Adapter.ContactAdapter.lambda$onBindViewHolder$0(ContactAdapter.java:55)
at com.example.divinkas.searchcontacts.Adapter.-$$Lambda$ContactAdapter$vWBPDFnY457u-Yc5wbC64H9_gx4.onClick(lambda)
at android.view.View.performClick(View.java:4463)
at android.view.View$PerformClick.run(View.java:18770)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5292)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
at dalvik.system.NativeStart.main(Native Method)
Может быть проблемма в том что я использую мокси и адаптер создается в презентере, откуда и берет свой контекст?
Нельзя для AlertDialog
использовать контекст приложения
context.getApplicationContext()
Все потому, что для AlertDialog
требуется обьект Window
контекста для отображения.
Говоря простыми словами, если у контекста нет UI
, он не годится.
В вашем случае используйте контекст активити, которая создала адаптер, переменная context
как я понимаю.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Объясните, недалекомуДля запуска Java приложений требуется JVM
У меня в приложении есть список сообщений (входящие и исходящие) и я хочу их сортировать по возможности по трем параметрам: текст сообщения,...
Как делать запросы и их обрабатывать - я разобрался
Пытаюсь внедрить spinner у себя в приложенииВ списке есть три пункта, и по непонятной мне причине воспринимается выбор только 2,3 если начинать...