Фрагменты перекрывают друг друга…и щелкает предыдущий фрагмент

#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 каждого фрагмента, но не работает