0

Ich bin ein neuer Typ auf dieser Programmierwelt, also denke ich, dass diese Frage einfach ist. Ich habe also eine Bildschaltfläche auf meinem Fragment und ich möchte, dass wenn ich darauf klicke, es eine Fragmenttransaktion zu einem anderen Fragment macht; aber die Sache ist, dass, wenn ich die App laufen lasse und auf die Bildschaltfläche klicke, sie nur den Inhalt des anderen Fragments in das Bild überlagert, wo der Bildknopf ist, was ich natürlich tun möchte, ist nur, zu dem anderen Fragment zu gehen Ich habe mich schon eine Weile damit beschäftigt, also hoffe ich, dass mir jemand hilft, danke.FragmentTransaction in Fragment

Hier ist mein Java-Code des Fragments

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();  

      } 
     }); 
    } 
} 

Neuer Code ...

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

hinzugefügt, aber ich erhalte diesen Fehler in der logcat:

java.lang.RuntimeException : Die Aktivität konnte nicht gestartet werden ComponentInfo {com.beispiel.administratoradora.prueba/com.beispiel.administratoradora.prueba.MainActivity}: java.lang.ClassCastException: [email protected] mu st implementieren OnSelectedListener

+0

Wie lautet der Name Ihres anderen Fragments? Der Grund, warum es "überlagert" ist, weil Sie '.replace' verwenden und die gleiche ID (' R.id.inicioo') angeben. – ishmaelMakitla

+0

Mein anderes Fragment wird "Interior" genannt, also könntest du mir bitte sagen, wie wäre der Code, so dass ich ihn statt "überlagern" einfach zum anderen Fragment bringe? –

+0

Fügen Sie die Layout-XML-Datei hinzu, in der Sie Ihre Fragmente deklariert haben (dies ist normalerweise Ihre Activity-Layoutdatei). Ich muss das sehen, damit ich Ihnen mitteilen kann, wie sich Ihr Code ändern muss. – ishmaelMakitla

Antwort

-1

Sie sollten ein Fragment nicht von einem anderen Fragment ersetzen. Versuchen Sie dies über die Aktivität zu tun.

eine Schnittstelle definieren für das Fragment

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

zu halten und das Fragment Container in der Interface-Implementierung von der Aktivität tauschen.

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

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

Die ersten beiden Abschnitte von Communicating with Other Fragments ist das, was Sie suchen.

+0

Ich habe den Code hinzugefügt, den du mir gesagt hast, aber ich starte die App und es stürzt ab und gibt mir den Fehler, den ich oben in meine Frage gesetzt habe, irgendeine Idee, was ich falsch mache? –

+0

Ihre Klasse implementiert die Schnittstelle nicht, genau wie die ausgelöste Ausnahme besagt, dass sie –

+0

ist. Sie müssen die Aktivität nicht erweitern, sondern müssen dieselbe Aktivität verwenden, die das Fragment zuerst geladen hat –

Verwandte Themen