1
votes

Fragment se chevauchant ... et le fragment précédent clique

J'ai créé une application dans laquelle j'avais 1 ACTIVITÉ et 8 Fragment dans lesquelles je gonfle chaque fragment dans l'activité. mais mon problème est que chaque fragment se chevauche . Je change la couleur d'arrière-plan de chaque fragment, mais lorsque je clique sur le bouton des espaces vides de mon fragment précédent, on clique dessus.

Veuillez me suggérer quelque chose pour sortir de cette situation.

Main_Activity.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;
}
}

Frag_1.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();
    }
}   


0 commentaires

3 Réponses :


3
votes

N'oubliez pas d'ajouter android: clickable = "true" et android: focusable = "true" à la vue parente de votre deuxième fragment afin qu'il capture le clics et ils ne sont pas propagés au fragment ci-dessous. Quelque chose comme ceci:

<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">   


6 commentaires

que va-t-il se passer avec ça ??


que se passe-t-il si j'appuie sur le dos et que j'obtiens le même écran comme a -> b, puis appuyez sur les boutons de a fonctionnera ?? \


ajoutez le code ci-dessus dans vos deux fragments et également si vous utilisez la méthode add au lieu de remplacer, ajoutez un arrière-plan solide dans une vue. afin que les deux fragments ne se chevauchent pas.


déjà partagé c'est le même code j'ai déjà coché la bonne réponse .. et votre réponse ne fonctionne pas .. comme vous l'avez suggéré j'ai ajouté ces 2 lignes dans chaque fragment mais cela n'a pas fonctionné


J'ai fait face au même problème et cela a fonctionné pour moi. partagez votre code xml.


Je n'ai pas utilisé de fond uni plutôt que de couleur d'arrière-plan, mais la réponse que j'ai acceptée a fonctionné pour moi



1
votes

À l'intérieur de la balise parent de votre deuxième fichier de mise en page de fragment, ajoutez ceci: -

android:clickable="true"
android:focusable="true"

alors lorsque vous cliquez sur une vue, il ne cliquera pas sur le fragment précédent.


3 commentaires

fonctionnera-t-il sur 8 fragments les uns sur les autres et lorsque je rétropresse et reviens au fragment précédent, le clic sur l'événement fonctionnera toujours pour le fragment supérieur


oui, cela fonctionnera, utilisez-le et n'hésitez pas à voter pour et à accepter.


ne fonctionne pas j'ai ajouté ces lignes dans la mise en page parent xml de chaque fragment mais ne fonctionne pas



1
votes

Vous utilisez fragmentTransaction.add () , qui ne supprimera pas le fragment précédent - utilisez fragmentTransaction.replace () si vous voulez que la vue de l'autre fragment

Remarque FragmentManager restaure automatiquement tous les fragments précédemment ajoutés lorsque votre activité est recréée (c'est-à-dire lorsque savedInstanceState! = null ). Par conséquent, vous voudrez vous assurer que vous n'ajoutez votre fragment initial qu'une seule fois - lorsque le savedInstanceState est nul.

if (savedInstanceState == null) {
    loadFragment(new FragmentRegLogSkip(), FragmentRegLogSkip.FRAGMENT_KEY);
}


2 commentaires

mais monsieur, il y a un problème précédent à partir des données n'est pas là ... :(


Cela ressemble à une question entièrement distincte, je vous encourage donc à créer une question entièrement distincte avec ce que vous voyez actuellement et ce que vous voulez voir