Фрагмент onClickListener не регистрирует клик

Я просмотрел все результаты поиска на SO и не могу найти ни одного, которое решило бы мою проблему. У меня есть фрагмент, и я пытаюсь использовать ImageButton, чтобы закрыть фрагмент. Но мой onClickListener не зарегистрирует щелчок. Я поставил точку останова на строке, и она ни разу не сработала.

ImageButton closeButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView;
    if (getArguments().getBoolean("invert") == true) {
        rootView = inflater.inflate(R.layout.popup_inverted_header_and_text, container, false);
    }else {
        rootView = inflater.inflate(R.layout.popup_header_and_text, container, false);
    }
    rootView.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    closeButton = (ImageButton) rootView.findViewById(R.id.closeButton);
    closeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().getFragmentManager().popBackStackImmediate();
        }
    });
    return rootView;
}

Судя по моим исследованиям, способ добавления фрагмента в представление может повлиять на это, поэтому вот код, в который я добавляю фрагмент.

FragmentManager fragmentManager = getFragmentManager();
    headerAndTextFragment hatf = headerAndTextFragment
            .newInstance("Information on GlassFrogg review process",
                        "Here is some information about the review process that you probably didn't actually want to know",
                        true);
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.popupContainer, hatf);
    transaction.addToBackStack(null).commit();
1
0
74
3

Ответы 3

когда вы открываете фрагмент, вы не добавляете его в backStack, поэтому, когда вы нажимаете кнопку изображения, в backStack нет фрагмента, который можно было бы извлечь.

использовать этот

closeButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
            getActivity().getFragmentManager().beginTransaction().remove(YOUR_FRAGMENT_NAME.this).commit();
    }
});

Я добавляю в конец стека

chargerstriker 20.08.2018 21:21

как? пожалуйста, посмотрите transaction.addToBackStack(null), он добавляет null в backStack

Momen Zaqout 20.08.2018 21:54

также убедитесь, что в обоих макетах есть ImageButton с идентификатором closeButton

Momen Zaqout 20.08.2018 21:58

Убедитесь, что вы используете одинаковые идентификаторы в обоих макетах, поскольку у вас есть один ImageButton, определенный в классе, в котором зарегистрирован прослушиватель.

у обоих одинаковый идентификатор

chargerstriker 20.08.2018 21:19

Эта ссылка должна дать вам лучшее представление о проблеме, stackoverflow.com/questions/6091194/…

Aanchal Garg 20.08.2018 21:31

Поскольку вы надуваете два разных макета. Вы уверены, что оба макета имеют этот ImageButton? и у обоих одинаковый ID?

у них обоих одинаковый идентификатор

chargerstriker 20.08.2018 21:19

Попробуйте назначить разные идентификаторы и переместить слушателей onClick в соответствующий блок if-else.

Shahnawaz Ansari 20.08.2018 21:21

Другие вопросы по теме