Я пытаюсь реализовать всплывающее представление в моем приложении с нижней навигацией (я использую фрагменты для каждого элемента в навигации). В одном фрагменте у меня есть ListView
с предметами. У каждого предмета есть кнопка, и я хочу создать всплывающее окно, которое сообщает дополнительную информацию о его предмете.
Я пытался создавать всплывающие окна в отдельных приложениях на действиях, и это работало просто отлично, поэтому я предполагаю, что это проблема немного сложной структуры моего приложения. (Activity - фрагмент - listView - Item - кнопка, которая вызывает всплывающее окно)
Вот мой код:
Фрагмент:
public class myFragment extends Fragment implements myListAdapter.EventListener {
...
@Override
public void setPopupLayout() {
Log.d(TAG, "setPopupLayout");
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup_compressors, null);
PopupWindow popupWindow = new PopupWindow(popupView, 500, 500, true);
TextView textView = popupView.findViewById(R.id.popup_details);
textView.setText("xd");
// Here the error seems to occur
popupWindow.showAtLocation(popupLayout, Gravity.NO_GRAVITY ,400, 400);
}
Адаптер:
public class myAdapter extends ArrayAdapter<Compressor>
{
private static final String TAG = "Compressor Adapter";
EventListener myListener;
// (...)
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
// (...)
Button button = convertView.findViewById(R.id.comp_details);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "onClick: button");
myListener.setPopupLayout();
}
});
return convertView;
}
Когда я нажимаю кнопку в listView, приложение печатает как Log.d(TAG, "onClick: button");
, так и Log.d(TAG, "setPopupLayout");
.
Затем NullPointerExeption
бросается:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' on a null object reference
и эта строка подсвечивается:
popupWindow.showAtLocation(popupLayout, Gravity.NO_GRAVITY ,400, 400);
Я все еще новичок в Android и буду очень благодарен за любой совет! Спасибо за чтение
EDIT:
Я думаю, что нашел проблему, в
popupWindow.showAtLocation(popupLayout, Gravity.NO_GRAVITY ,400, 400);
Я использую popupLayout
, который назначен в onViewCreated
как
popupLayout = (RelativeLayout) view.findViewById(R.id.relative);
и это назначено как ноль (который, кажется, вызывает ошибку).