Soy bastante nuevo en Android, por lo que esta podría tener una respuesta obvia, pero parece que no puedo encontrarlo.Android: Agregar un fragmento a una actividad
Estoy escribiendo una versión de una aplicación de calculadora. Quiero hacer que cuando un usuario haga clic en uno de los botones, se inicie un fragmento (con más botones que puedan usarse para obtener más información).
El fragmento de código es el siguiente:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class VariableMenu extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
con un diseño XML de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/Bx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/By"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/Bx"
android:layout_alignTop="@id/Bx"
android:text="Y"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/Bz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/By"
android:layout_alignTop="@id/By"
android:text="Z"
android:onClick="onButtonClicked"/>
</RelativeLayout>
(Sé que no debería usar cadenas codificadas de forma rígida, pero lo arreglar eso una vez que lo ejecute)
He intentado que se agregue usando una transacción fragmentada con el método onTouch del botón de activación, así:
public void onFragmentActivated(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
VariableMenu fragment = new VariableMenu();
fragmentTransaction.add(R.layout.main, fragment);
fragmentTransaction.commit();
}
pero dio un error diciendo que "No se encontró vista para id: ... (main) para el fragmento VariableMenu".
Entonces hice una vista para que en el principal archivo XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
(Irrelevant things)
<fragment
android:id="@+id/Fragment"
android:name="calculator.app.VariableMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/B1"/>
(Irrelevant things)
</RelativeLayout>
Pero esto resultó en el fragmento de estar allí tan pronto como se creó la actividad (y setContentView (R.layout.main) ; corrió).
¿Hay una manera simple de agregar y quitar mediante programación un fragmento con una IU a una actividad?
+1. @Spencer también, si tu fragmento puede actuar como una actividad separada, puedes cambiarlo para extender FragmentActivity y tratarlo como una actividad normal – Joe
Muchas gracias, funcionó perfectamente. No creo que FragmentActivity funcione en este caso, pero tendré en cuenta esa opción para el futuro. – Spencer