0

Im un nouveau gars sur ce monde de programmation, donc je suppose que cette question est simple. J'ai donc un bouton image sur mon fragment et moi ce que je veux, c'est que quand je clique dessus, il fait une fragmentation de transaction vers un autre fragment; mais le truc c'est que quand je lance l'application et que je clique sur le bouton image, ça ne fait que "superposer" le contenu de l'autre fragment dans celui où se trouve l'imagebutton, bien sûr ce que je veux faire c'est juste aller à l'autre fragment J'y ai été confronté pendant un moment alors j'espère que quelqu'un m'aide, merci.FragmentTransaction dans Fragment

Voici mon code java du fragment

public class inicio extends Fragment { 

    public inicio() { 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.fragment_inicio,container,false); 

     ImageButton luces = (ImageButton)view.findViewById(R.id.imageButton); 

     luces.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       interior interior= new interior(); 
       FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.inicioo, interior).commit();  

      } 
     }); 
    } 
} 

Nouveau code ajouté ...

public class transaction extends MainActivity 
     implements com.example.administradora.prueba.inicio.OnSelectedListener{ 


    public void onButtonSelected() { 
     interior interior= new interior(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.inicioo, interior).commit(); 
    } 
} 

mais je reçois cette erreur dans le logcat:

java.lang.RuntimeException : Impossible de démarrer l'activité ComponentInfo {com.example.administradora.prueba/com.example.administradora.prueba.MainActivity}: java.lang.ClassCastException: [email protected] mu st implement OnSelectedListener

+0

Quel est le nom de votre autre fragment? La raison pour laquelle il "se superpose" est parce que vous utilisez '.replace' et avez spécifié le même id (' R.id.inicioo'). – ishmaelMakitla

+0

Mon autre fragment est appelé "intérieur", alors pourriez-vous s'il vous plaît me dire comment serait le code afin que, au lieu de "superposer", il me donne juste l'autre fragment? –

+0

Veuillez ajouter le fichier XML de mise en page où vous avez déclaré vos fragments (il s'agit généralement de votre fichier de mise en page d'activité). J'ai besoin de le voir pour que je puisse vous conseiller sur la façon dont votre code doit changer. – ishmaelMakitla

Répondre

-1

Vous ne devez pas remplacer un fragment d'un autre fragment. Essayez de le faire à travers l'activité.

une interface pour Define le Fragment de tenir

public class MyFragment extends Fragment { 
    OnSelectedListener mCallback; 

    // Container Activity must implement this interface 
    public interface OnSelectedListener { 
     public void onButtonSelected(); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (OnSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnSelectedListener"); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view=inflater.inflate(R.layout.fragment_inicio,container,false); 

     ImageButton luces = (ImageButton)view.findViewById(R.id.imageButton); 

     luces.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       // Send the event to the host activity 
       if (mCallback != null) mCallback.onButtonSelected(); 
      } 
     }); 

     return view; 
    } 
} 

et remplacez le conteneur Fragment dans la mise en œuvre de l'interface de l'activité.

public class MainActivity extends Activity 
     implements MyFragment.OnSelectedListener{ 
    ... 

    public void onButtonSelected() { 
     interior interior= new interior(); 
     getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.inicioo, interior) 
      .commit();  
    } 
} 

Les deux premières sections de Communicating with Other Fragments est ce que vous recherchez.

+0

J'ai ajouté le code que vous m'avez dit, mais je cours l'application et il se bloque et me donne l'erreur que j'ai mis ci-dessus dans ma question, aucune idée de ce que je fais mal? –

+0

Votre classe n'implémente pas l'interface, tout comme l'exception lancée dit qu'elle devrait l'être –

+0

Vous n'avez pas besoin de prolonger l'activité, vous devez utiliser la même activité que celle qui a chargé le fragment en premier –