Partage
  • Partager sur Facebook
  • Partager sur Twitter

implementer deux onclicklistener

    19 août 2022 à 15:33:31

    bonjour, etant en train de créer une application je rencontre actuellement un probleme.j'ai une main activity qui grace au fragment manager gère l'ajout de fragment.lors qu'une personne clique sur un bouton d'un des deux fragment, le clique est diffusé a l'activité parent grace a callback et un onclick listener comme suit:

    code du premier fragment:

    public class StartPresentationFragment extends Fragment implements View.OnClickListener {
        private Button startbutton;
    
        public StartPresentationFragment() {
            // Required empty public constructor
        }
    
        //2 - Declare callback
        private StartPresentationFragment.OnButtonClickedListener mCallback;
    
        // 1 - Declare our interface that will be implemented by any container activity
        public interface OnButtonClickedListener {
            public void onButtonClicked(View view);
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            //Inflate the layout of MainFragment
            View result=inflater.inflate(R.layout.fragment_start_presentation, container, false);
            //Set onClickListener to button "SHOW ME DETAILS"
            result.findViewById(R.id.startbutton).setOnClickListener(this);
    
            return result;
        }
    
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
    
            // 4 - Call the method that creating callback after being attached to parent activity
            this.createCallbackToParentActivity();
        }
    
    
        @Override
        public void onClick(View v) {
            //Here is handled the button click
            // 5 - Spread the click to the parent activity
            mCallback.onButtonClicked(v);
        }
    
        // 3 - Create callback to parent activity
        private void createCallbackToParentActivity(){
            try {
                //Parent activity will automatically subscribe to callback
                mCallback = (StartPresentationFragment.OnButtonClickedListener) getActivity();
            } catch (ClassCastException e) {
                throw new ClassCastException(e.toString()+ " must implement OnButtonClickedListener");
            }
        }
    }

    et voici le code de l'activité parent :

    public class StartActivity extends AppCompatActivity implements StartcheckAccountFragment.OnButtonClickedListener{
    //temporaire
        private int i;
        public static boolean startbuttonclicked;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_start);
    
            //initialiser l'ecran de chargement
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .setReorderingAllowed(true)
                        .add(R.id.fragment_container_view_start_activity, LoadingFragment.class, null)
                        .commit();
            }
    
            if (haveInternetConnection() == true)
            {
                //Le périphérique est connecté
                //temporaire
    
                i=1;
                // TODO: changer la valeur et vérifier si l'utilisateur n'avait pas déja un compte
                if(i==0)
                {
                    //TODO : créer un intent vers la page d'accueil et le menu
                }
                else
                {
                    if (savedInstanceState == null) {
                        getSupportFragmentManager().beginTransaction()
                                .setReorderingAllowed(true)
                                .add(R.id.fragment_container_view_start_activity, StartPresentationFragment.class, null)
                                .commit();
                    }
                }
    
            }
            else
            {
                // Faire quelque chose s'il n'est pas connecté
                Snackbar snackbar=  Snackbar.make(findViewById(R.id.principalecontainer),"vous n'etes pas connecté a internet", Snackbar.LENGTH_SHORT);
                snackbar.show();
    
                //timer pour 5 secondes
                new Handler().postDelayed(new Runnable() {
    
                    @Override
                    public void run() {
                        if (haveInternetConnection() == true)
                        {
                            //Le périphérique est connecté
                            //temporaire
    
                            i=1;
                            // TODO: changer la valeur et vérifier si l'utilisateur n'avait pas déja un compte
                            if(i==0)
                            {
                                //TODO : créer un intent vers la page d'accueil et le menu
                            }
                            else
                            {
                                if (savedInstanceState == null) {
                                    getSupportFragmentManager().beginTransaction()
                                            .setReorderingAllowed(true)
                                            .add(R.id.fragment_container_view_start_activity, StartcheckAccountFragment.class, null)
                                            .commit();
                                }
                            }
                        }
                        else
                        {
                            // Faire quelque chose s'il n'est pas connecté
                            Snackbar snackbar=  Snackbar.make(findViewById(R.id.principalecontainer),"Nous ne pouvons pas nous connecter a internet pour le moment.merci de réessayer plus tard.", Snackbar.LENGTH_SHORT);
                            snackbar.show();
                        }
                    }
                }, 5_000); // LENGTH_SHORT is usually 5 second long
            }
    
    
        }
    
        @Override
        public void onButtonClicked(View view) {
            Log.e(getClass().getSimpleName(),"Button clicked !");
        }
    
    }
    

    mais le probleme c'est que j'aimerais faire un callback d'un  bouton situé dans le deuxième fragment, mais le truc c 'est que je ne peux pas faire deux implements dans la classe car il y a deja :

    implements StartcheckAccountFragment.OnButtonClickedListener{

    j'aimerais donc savoir comment gerer dans la main activity deux boutons de deux fragments differents.

    Merci par avance


    • Partager sur Facebook
    • Partager sur Twitter
      22 août 2022 à 15:43:15

      public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

      Formation construisez une interface utilisateur flexible et adaptative

      https://openclassrooms.com/fr/courses/4568596-construisez-une-interface-utilisateur-flexible-et-adaptative/4797601-developpez-votre-premier-navigation-drawer

      • Partager sur Facebook
      • Partager sur Twitter

      implementer deux onclicklistener

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown