Cómo agregar fragmentos de forma programática en relativelayout
He diseñado un RelativeLayout. Estoy tratando de añadir fragmento a ella. Se superpone. ¿Qué debo hacer para que venga uno por debajo de otro.
FragmentTransaction t = getSupportFragmentManager().beginTransaction(); FragmentTest myFragment = new FragmentTest(); t.add(layout.getId(), myFragment, "myFirstFragment"); FragmentTest myFragment2 = new FragmentTest(); t.add(layout.getId(), myFragment2, "mySecondFragment"); t.commit();
// Las vistas de myFragment y myFragment2 se superponen aunque he definido la orientación vertical.
- ¿Por qué recibo una CircularDependencyException?
- Alineación de fragmentos con RelativeLayout
- Arrastrar y soltar de Android. Posicionamiento de la imagen después de arrastrar
- Diseño de Android - RelativeLayout (color de fondo)
- Android ScrollView no funciona correctamente
<RelativeLayout android:id="@+id/idll1" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_marginLeft="10sp" android:layout_marginRight="0sp" android:layout_marginTop="10sp" android:layout_weight="1" android:paddingBottom="5dp" android:paddingLeft="10dp" android:paddingRight="5dp" android:paddingTop="5dp" android:orientation="vertical"/>
- Actualizar la posición de la vista debajo de otra vista en Android
- ¿Cómo poner varias vistas de texto y la vista de la imagen en android?
- ScrollView no está jugando bien con RelativeLayout
- Configuración de vistas de forma dinámica con la configuración de LayoutParams.addRule en la última posición de la vista
- Alinee a la derecha de la pantalla con margen Android
- Android: Uso de alignBaseline para una imagen que sigue al texto
- Cómo alinear 8 pequeños círculos alrededor de un círculo grande centrado, como muestra la imagen adjunta?
- Cómo mostrar un botón en la posición de pantalla aleatoria
Podemos hacerlo de la siguiente manera:
Clase de actividad en la que está presente el diseño relativo. Que ese diseño relativo (mParentLayout) sea elemento raíz de la jerarquía de vista de la actividad. Y el fragmento que se agregará al diseño relativo será mGridFragment en una posición debajo del Button (mGridBtn).
public class DroidOpsActivity extends FragmentActivity implements OnClickListener { private RelativeLayout mParentLayout = null; private Button mGridBtn = null; private FragmentManager mFragmentMgr = null; private FragmentTransaction mFragmentTransc = null; private Fragment mGridFragment = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initialize(); } private void initialize() { setContentView(R.layout.activity_droid_ops); mParentLayout = (RelativeLayout) findViewById(R.id.parent_layout); mGridBtn = (Button) findViewById(R.id.grid_button); mFragmentMgr = getSupportFragmentManager(); registerListener(); } private void registerListener() { mGridBtn.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.grid_button: loadFragment(); mGridBtn.setEnabled(false); break; } } private void loadFragment() { mGridFragment = new DroidOpsFragments(); mFragmentTransc = mFragmentMgr.beginTransaction(); mFragmentTransc.add(mParentLayout.getId(), mGridFragment); mFragmentTransc.addToBackStack(null); mFragmentTransc.commit(); } public RelativeLayout.LayoutParams fetchLayoutParams() { RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); // We can add any rule available for RelativeLayout and hence can position accordingly params.addRule(RelativeLayout.BELOW, mGridBtn.getId()); return params; } }
Clase de fragmento correspondiente que se va a colocar en la disposición de la actividad.
public class DroidOpsFragments extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.view_word_grid, null); // Here we are fetching the layoutParams from parent activity and setting it to the fragment's view. view.setLayoutParams(((DroidOpsActivity) activity).fetchLayoutParams()); return view; } }
Tienes que configurar prarams de diseño en las vistas de tu Fragmento.
¿Son XML o HardCode?
Si son hardcode, tendrás que obtener el FrameLayout Wrapper que Google pone en todas las vistas de los fragmentos usando la biblioteca de soporte compatible con versiones anteriores y establecer sus parámetros relativelayout en el onlayout de tu vista o onMeasure.
De lo contrario, si son XML, simplemente establezca las reglas relativas.
Creo que debería ser LinearLayout
Rápido y sucio parece ser un poco mejor. Si conoce su diseño ya puede guardar algunos pasos, y sé que un gigante si (X instanceof Clase) conjunto de bloques es mal visto, es bastante versátil.
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ViewGroup.LayoutParams p = view.getLayoutParams(); if (p instanceof CoordinatorLayout.LayoutParams) { CoordinatorLayout.LayoutParams params = ((CoordinatorLayout.LayoutParams)p); params.gravity = Gravity.END | Gravity.BOTTOM; view.setLayoutParams(params); } else if (p instanceof RelativeLayout.LayoutParams) { RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)p); params.addRule(RelativeLayout.ALIGN_BOTTOM); view.setLayoutParams(params); } }
- Las ondulaciones no se muestran con selectableItemBackground como primer plano en un CardView con un dispositivo Android 5.0
- Fopen en el código JNI C falla en el archivo colocado en la carpeta de activos en la aplicación android