#android #android-fragments #android-activity
#Android #android-фрагменты #android-активность
Вопрос:
Я создал приложение, в котором у меня было 1 ДЕЙСТВИЕ и 8 фрагментов, в которых я раздуваю каждый фрагмент в действие. но моя проблема в том, что каждый фрагмент перекрывает друг друга. Я меняю цвет фона каждого фрагмента, но когда я нажимаю кнопку «Свободные места» моего предыдущего фрагмента, нажимается.
пожалуйста, предложите мне что-нибудь, чтобы выйти из этой ситуации.
Main_Activity.class
public class ActRegistration extends AppCompatActivity {
FragmentManager fm;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_registration);
fm = getSupportFragmentManager();
loadFragment(new FragmentRegLogSkip(), FragmentRegLogSkip.FRAGMENT_KEY);
}
public void loadFragment(Fragment fragmentName, String fragmentKey) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.add(R.id.id_registration_layout_frame, fragmentName);
fragmentTransaction.addToBackStack(fragmentKey);
fragmentTransaction.commit();
}
}
Frag_1.class
public class FragmentRegLogSkip extends Fragment implements View.OnClickListener {
private Activity activity;
private Context context;
public static final String FRAGMENT_KEY = "fragment_reg_log_skip";
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getContext();
LanguageChanger.changeLanguage(context);
View view = inflater.inflate(R.layout.act_registration_screen_login, container, false);
return view;
}
}
Ответ №1:
Не забудьте добавить android:clickable="true"
и android:focusable="true"
в родительский вид вашего второго фрагмента, чтобы он улавливал щелчки и они не распространялись на фрагмент ниже. Что-то вроде этого:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="true">
Комментарии:
1. что с этим произойдет??
2. что, если я нажму назад и получу тот же экран, что и a -> b, тогда кнопки обратного нажатия в a будут работать??
3. добавьте приведенный выше код в оба ваших фрагмента, а также, если вы используете метод add вместо replace, добавьте сплошной фон в представление. чтобы оба фрагмента не перекрывались.
4. я уже поделился своим тем же кодом, я уже отметил правильный ответ .. и ваш ответ не работает .. как вы и предлагали, я добавил эти 2 строки в каждый фрагмент, но это не сработало
5. я столкнулся с такой же проблемой, и у меня это сработало. поделитесь своим XML-кодом.
Ответ №2:
Вы используете fragmentTransaction.add()
, который не удаляет предыдущий фрагмент — используйте fragmentTransaction.replace()
, если хотите, чтобы вид другого фрагмента был удален.
Обратите внимание, что FragmentManager
все ранее добавленные фрагменты автоматически восстанавливаются при повторном выполнении вашего действия (т. Е. когда savedInstanceState != null
). Поэтому вам нужно убедиться, что вы добавляете свой начальный фрагмент только один раз — когда savedInstanceState
равно нулю.
if (savedInstanceState == null) {
loadFragment(new FragmentRegLogSkip(), FragmentRegLogSkip.FRAGMENT_KEY);
}
Комментарии:
1. но, сэр, есть одна проблема, предыдущих данных там нет … : (
2. Это звучит как совершенно отдельный вопрос, поэтому я бы посоветовал вам создать совершенно отдельный вопрос с тем, что вы видите в данный момент и что вы хотите увидеть
Ответ №3:
Внутри родительского тега вашего второго файла макета фрагмента добавьте это :-
android:clickable="true"
android:focusable="true"
затем, когда вы нажимаете на любой вид, он не будет щелкать предыдущий фрагмент.
Комментарии:
1. будет ли это работать с 8 фрагментами друг над другом, и когда я нажму назад и вернусь к предыдущему фрагменту, событие щелчка все еще будет работать для верхнего фрагмента
2. да, это сработает, используйте это и не стесняйтесь повышать голос и соглашаться.
3. не работает я добавил эти строки в родительский макет xml каждого фрагмента, но не работает