EDIT:diseño con el fragmento y FrameLayout reemplazado por otro fragmento y FrameLayout
Así que después de los comentarios de abajo, yo Revisted y se dio cuenta lo que me estaba colgando.
imaginar mi lista de clientes y la actividad de los detalles del cliente iniciarse por:
public class ClientsMainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//StudioTabOpenHelper db;
setContentView(R.layout.main_client_activity);
}
}
Así que esto funciona muy bien, se pone en marcha mi main_client_Activity (definida en un diseño que sigue, y yo llamo a esta actividad cuando un botón en mi principal se hace clic en la pantalla):
Intent intent = new Intent(getActivity(), ClientsMainActivity.class);
startActivity(intent);
Fácil es el problema, el ClientsMainActivity
no dice que una OnCreateView ni nada, sólo establece el diseño de la disposición que define mi Fragmento, y mi ListFragment. Esto está bien porque yo no estoy tratando de pasar nada en el ClientsMainActivity
, pero si tengo una actividad hipotética como:
SessionMainsActivity
que se llama cuando hacen clic en la sesión de edición de un cliente, entonces yo no estaría llamando a la SessionsMainActivity
de la misma manera (inicia la actividad que acaba de establecerse en alayout), me gustaría que el diseño se establezca ya que define cómo se dividen mis fragmentos. Pero también me gustaría pasar los datos a eso y luego a los fragmentos subsiguientes (como en qué sesión hicieron clic para editar/eliminar con.
Así que me pregunto si lo anterior tiene sentido, estoy seguro de que es un simple Lo que no puedo entender es que no tengo problemas para llamar a FragmentActivitie
de otros fragmentos, ocupan toda la pantalla, pero funciona. Así que supongo que el gran problema es que ClientsMainActivity
es de algún ejemplo que encontré en línea para hacer recetas que le muestra cómo hacer múltiples fragmentos en una pantalla. Lo que me da todo lo que FragmentActivity
hace es establecer la vista de contenido, en un diseño que hace todo el trabajo que parece, así que es por eso que no puedo entender cómo codificarlo haga lo mismo pero déjeme pasar los valores a los fragmentos que el diseño define, etc.
FIN EDITAR
Así que estoy usando este pequeño tutorial aquí:
http://developer.android.com/guide/topics/fundamentals/fragments.html
Me ha llegado un largo camino y la utilización de lo que dicen que hacer para la actividad, y fragment_layout.xml, obtuve una buena lista de clientes a la izquierda (Esto es un listfragment) y un fragmento de detalles a la derecha.
Luego agregué la capacidad de editar información de sesión en un cliente (o editar detalles del cliente), ambos de los cuales eran fragmentos de pantalla completa. Esto funcionó muy bien.
Ahora decidí que mi edición de sesión sería mejor si volviera a dividir la información en dos paneles.
Esto no está funcionando como pensaba, como he dicho tengo un main_Activity que hace esto en el onCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_client_activity);
}
con el main_client_activity.xml
se define en dos diseños, pero el uno para tabletas paisaje está aquí:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.viciousbytes.studiotab.subactivities.ClientListView"
android:id="@+id/client_list" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/client_details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground"/>
</LinearLayout>
¡Todo funciona genial! En cuyo caso en que manejé todo lo demás como una actividad de pantalla completa que comenzó su propio fragmento:
EditSessionActivity
EditClientActiivyt
ambos de los cuales utilizan getSupportFragmentManager() beginTransaction y pude pasar la información en él desde la llamada .newInstance..
Tenía mi diseño session_edit.xml
definido con botones, textviews, etc. y eso funcionaba muy bien. Eso es lo que cargué en mi fragmento SessionEdit
"lanzado" por mi EditSessionActivity
Pero ahora, como quiero dividirlo, me encontré con un problema. Más arriba definí una lista de clientes y una ID de cliente_detalles, ¿están estos marcadores de posición en mi pantalla? ¿Hago referencia a esos cuando quiero reemplazar lo que hay allí con fragmentos totalmente diferentes?
o puedo crear otro diseño fragmento llamado algo así como fragment_session_layout que define algo como:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.viciousbytes.studiotab.subactivities.SessionEdit"
android:id="@+id/session_edit" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/invoice_details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
</LinearLayout>
En este momento no sé qué título este en la punta de la lengua de lo que estoy pidiendo, básicamente, cómo para obtener dos paneles de fragmentos dos veces. La demostración en línea muestra cómo hacer una (y un simple ListFragment al respecto).
he hecho todo lo anterior y simplemente no puedo encontrar la manera de pasar en el fragmento de los datos que necesito, yo estaba usando esto en mi EditSessionActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int clientID = getIntent().getIntExtra(THE_SELECTED_CLIENT, -1);
int sessionID = getIntent().getIntExtra(SELECTED_SESSION,-1);
SessionEdit edits = SessionEdit.newInstance(this.getBaseContext(), false, clientID, sessionID);
mUIListener = (OnUpdateUI)edits;
getSupportFragmentManager().beginTransaction().add(android.R.id.content, edits).commit();
}
que funcionaba, sino para tratar de adherirse al ejemplo del fragmento anterior, asumí que mi EditSessionActivit
y era como hacer otro MainActivity
(porque tiene dos paneles como el principal). por lo que la recodificado en onCreate
EditSessionActivity
con esto:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_session_fullview);
}
cual después de luchar en mi fragmento EditSession tratar con el onCreateView, Tengo este fin de trabajar pero no pudo pasar en los datos de causa no hay ninguna instancia de la objetar el uso como el anterior onCreate
que tenían las edits=SessionEdit.newInstance(...)
lo tanto, es una buena práctica para estar haciendo otro diseño que tiene dos dolores en ella y comenzar que cuando se desencadena la acción correcta. ¿O se supone que debe reemplazar los dos fragmentos ya creados? desde mi main_client_activity.xml
de alguna manera?
Tengo el mismo "problema" ahora que he conseguido 2 listfragments en la vista y yo estoy cambiando dinámicamente después de una fila es selected.I pensar mucho cuál es la mejor, pero no creo que esta es la mejor manera de que utilicé – kameny
Los ejemplos de estos fragmentos en línea suelen ser suficientes para casos simples, pero más que eso y usted está solo. Espero que alguien tenga una buena sugerencia. – Codejoy
I aggree contigo, estos tutoriales bueno para situaciones básicas y si alguien quiere crear la interfaz de usuario complicada con fragmentos que necesita pensar mucho: D – kameny