Я просмотрел все результаты поиска на 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();
когда вы открываете фрагмент, вы не добавляете его в backStack, поэтому, когда вы нажимаете кнопку изображения, в backStack нет фрагмента, который можно было бы извлечь.
использовать этот
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getFragmentManager().beginTransaction().remove(YOUR_FRAGMENT_NAME.this).commit();
}
});
как? пожалуйста, посмотрите transaction.addToBackStack(null), он добавляет null в backStack
также убедитесь, что в обоих макетах есть ImageButton с идентификатором closeButton
Убедитесь, что вы используете одинаковые идентификаторы в обоих макетах, поскольку у вас есть один ImageButton, определенный в классе, в котором зарегистрирован прослушиватель.
у обоих одинаковый идентификатор
Эта ссылка должна дать вам лучшее представление о проблеме, stackoverflow.com/questions/6091194/…
Поскольку вы надуваете два разных макета. Вы уверены, что оба макета имеют этот ImageButton? и у обоих одинаковый ID?
у них обоих одинаковый идентификатор
Попробуйте назначить разные идентификаторы и переместить слушателей onClick в соответствующий блок if-else.
Я добавляю в конец стека