android - studio - La actividad de fragmentos se bloquea en la pantalla
manual de programacion android pdf (5)
Añadiendo
static
Me lo arregló
public class MyFragment extends Fragment
Tengo una actividad de fragmento simple. En el método onCreate (), simplemente agrego un fragmento. El código se publica a continuación. Sin embargo, cada vez que gire la pantalla, el sistema volverá a llamar a Crear () y luego se bloqueará en la declaración super.onCreate (); Supongo que es un problema general de fragmento de Android. ¿Alguien me puede ayudar?
public class FragActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedState){
super.onCreate(savedState);
MyFragment frag = new MyFragment();
getSupportFragmentManager().beginTransaction().replace(android.R.id.content, frag)
.commit();
}
}
El seguimiento de la pila está adjunto:
java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo {}: android.support.v4.app.Fragment $ InstantiationException: no se puede crear una instancia del fragmento: asegúrese de que el nombre de la clase existe, es público y tiene un constructor vacío que es público
Bueno, como tu error dice, algo está mal con tu clase MyFragment. Asegúrate de tener algo como:
public class MyFragment extends Fragment
al declarar tu clase de fragmento. Además, no deberías tener ningún constructor en la clase. Así que asegúrate de no tener uno.
Si publica el código para su clase Fragment, podríamos ayudarlo mejor.
La clase Fragment tampoco debe ser una clase interna, ya que se crea una instancia fuera de su alcance de clase de actividad. La clase anidada está bien.
Me enfrenté al problema similar cuando cambié el nombre de mi proyecto. La clase de fragmento se denomina mediante el diseño xml y, por lo general, contiene el nombre completo del paquete. Aquí se muestra el problema. Mi nombre de clase de fragmento todavía tenía un nombre de paquete antiguo.
Su Fragmento no debería tener constructores debido a la instancia de FragmentManager. Debería tener un newInstance()
método estático de newInstance()
definido y pasar cualquier parámetro mediante argumentos (paquete)
Por ejemplo:
public static final MyFragment newInstance(int title, String message)
{
MyFragment fragment = new MyFragment();
Bundle bundle = new Bundle(2);
bundle.putInt(EXTRA_TITLE, title);
bundle.putString(EXTRA_MESSAGE, message);
fragment.setArguments(bundle);
return fragment ;
}
Y lea estos argumentos en onCreate:
@Override
public void onCreate(Bundle savedInstanceState)
{
title = getArguments().getInt(EXTRA_TITLE);
message = getArguments().getString(EXTRA_MESSAGE);
//...
}
De esta forma, si se separa y se vuelve a conectar el estado del objeto se puede almacenar a través de los argumentos, al igual que los paquetes adjuntos a Intents.