2012-08-24 10 views
21

He creado un archivo xml llamado editor.xml que contiene un FrameLayout. En mi actividad principal, intento agregar mi fragmento personalizado a FrameLayout.Intentando agregar un fragmento a mi contenedor de fragmentos FrameLayout

El error que recibo cuando se trata de añadir mi fragmento es:

El método add (int, fragmento) en el FragmentTransaction tipo no es aplicable para los argumentos (int, editorFrag)

Sin embargo, mi editorFrag extiende Fragmento, así que estoy confundido sobre por qué está sucediendo esto. A continuación está mi código para los archivos que he mencionado. Cualquier ayuda es apreciada.

Editor.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/fragment_container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" /> 

editorFrag.java

public class editorFrag extends Fragment 
{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
    { 

     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.newlevel, container, false); 
    } 
} 

MainActivity.java

public class editorActivity extends FragmentActivity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.editor); 

     // Check that the activity is using the layout version with the fragment_container FrameLayout 
     if(findViewById(R.id.fragment_container) != null) 
     { 
      // if we are being restored from a previous state, then we dont need to do anything and should 
      // return or else we could end up with overlapping fragments. 
      if(savedInstanceState != null) 
       return; 

      // Create an instance of editorFrag 
      editorFrag firstFrag = new editorFrag(); 

      // add fragment to the fragment container layout 
      getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFrag); 
     } 
    } 
} 

respuesta:

Luksprog respondió este problema para mí continuación diciéndome a c diablos mis importaciones. Eclipse eligió importar la versión SDK de Fragment en lugar de la versión de soporte que necesitaba. Gracias por la ayuda.

+0

Compruebe sus importaciones. Vea si no importó la versión 'SDK' de' Fragment' en lugar del paquete de compatibilidad 'Fragment'. – Luksprog

+0

Tiene toda la razón, dejé que eclipse importara para mí y eligió la versión del SDK donde elegí la versión de soporte en mi actividad. Muchas gracias – Pedrom

+0

@Perdom ¿acepta la respuesta a esta pregunta? Gracias. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

Respuesta

29

Olvidó commit() su transacción.

+0

Tiene usted razón en ese hecho pero me deshice del compromiso para tratar de reducir mi problema. Gracias por su respuesta, tendré que volver a agregar commit(). – Pedrom

5

También olvidó llamar al método addtoBackStack(), de lo contrario, su aplicación se cerrará al presionar el botón Atrás.

5

añadir commit() como esto

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFrag).commit(); 
Cuestiones relacionadas