Agregue fragmento dinámicamente con LayoutParams
¿Es posible añadir dinámicamente Fragmentos con LayoutParams? Tengo 2 fragmentos que quiero poner en un RelativeLayout: uno debe bloquear a la izquierda. El otro debe ser bloqueado a la derecha.
- Manejo de la pila posterior de fragmentos con el cajón de navegación
- Vaciar ListView dentro de ScrollView como dos Fragmentos
- TabActivity -> Fragmentos .. ¿es realmente esto complicado?
- ¿Cómo hacer que los fragmentos se carguen más rápido?
- Cómo cerrar el fragmento actual mediante el botón como el botón Volver?
- Android: Fragmento del ciclo de vida en la rotación de la pantalla
- Devoluciones de llamadas de la fragmentación de Android
- Ejemplos de Fragmentos de Android
- Fragment y FragmentList no muestra Android Studio
- Fragmentos, AsyncTask y Oyentes
- ¿Cómo utilizar el patrón MVVM de Android con fragmentos?
- Java.lang.IllegalStateException: Fragmento no adjunto a la actividad
- ¿Por qué se arroja NPE al finalizar Actividad?
Usted podría envolver cada uno en un diseño (como un LinearLayout
), a continuación, establecer su tamaño y posición. Esta respuesta se refiere a un problema similar y muestra cómo utilizar un FrameLayout
con parámetros de diseño personalizado para contener un Fragment
.
Tenga en cuenta que, al utilizar el objeto fragment
en XML, puede utilizar los atributos android:layout_*
para controlar su posición. Al igual que:
<LinearLayout android:orientation="horizontal" ... > <fragment android:layout_height="wrap_content" android:layout_width="0px" android:layout_weight="1" ... /> <fragment android:layout_height="wrap_content" android:layout_width="0px" android:layout_weight="1" ... /> </LinearLayout>
Sin embargo, no creo que sea posible aplicar parámetros de diseño de forma programática a Fragment
s . No son ViewGroup
s, después de todo.
He utilizado el siguiente enfoque para un ListFragment en un LinearLayout:
class CustomListFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ViewGroup v = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); v.setLayoutParams(new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1)); return v; } }
Ahora que leo sus comentarios sobre la otra respuesta, veo que es similar a lo que consideró.
Pero tenga en cuenta: el marco puede instanciar sus fragmentos. Por lo tanto, la clase debe ser pública y debe tener un constructor sin más argumentos.
Cualquier setter-métodos para personalizar sus fragmentos no funcionará por lo tanto, ya que no serán llamados para ninguna instancia de creación de framework.
Puede configurar LayoutParameters de su Fragmento en el método onCreateView . Antes de devolver la vista final como valor de retorno de este método, puede establecer parámetros de diseño. Como un fragmento de ejemplo a continuación, devuelve un TextView como su Vista que se pegó a su padre izquierdo configurando LayoutParams en él:
public static class DummySectionFragment extends Fragment { public static final String ARG_SECTION_NUMBER = "placeholder_text"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setGravity(Gravity.CENTER); textView.setText(Integer.toString(getArguments().getInt( ARG_SECTION_NUMBER))); LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); textView.setLayoutParams(lp); return textView; } }
Para casos específicos, puede mover el ordenamiento de la capa a onStart () override
Fragmento se parece a esto
Clase pública FragmentOne extends Fragment {
private Client client; public interface Client { RelativeLayout.LayoutParams fetchFragmentOneParams(FragmentOne fragment); } @Override public void onAttach(Context context) { super.onAttach(context); Activity activity = getActivity(); try { client = (Client) getActivity(); } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement FragmentOne.Client"); } } @Override public void onStart() { super.onStart(); getView().setLayoutParams(client.fetchFragmentOneParams(this)); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { RelativeLayout view = new RelativeLayout(getActivity()); // // code // return view; }
- ¿Cómo mostrar sólo archivos mp3 usando MediaStore?
- URI de Universal Image Loader para Android desde InputStream