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.

 <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"/> 

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); } } 
  • Android: extiende Linearlayout, pero necesita lo mismo para RelativeLayout. Código duplicado inevitable?
  • Definiendo el orden Z de vistas de RelativeLayout en Android
  • Cambiar la posición de TextView dinámicamente usando java en RelativeLayout android
  • Programar de forma programada android: layout_centerHorizontal
  • Android: rendimiento lento con una gran imagen en ImageView
  • Tener un EditText sobre un teclado suave con una vista GL en el fondo mediante programación
  • Establecer minHeight en RelativeLayout, deshabilita alignBaseline?
  • Cómo pasar de una actividad a otra Actividad en Android
  • Problemas de Android para convertir ViewGroup con niños en mapa de bits
  • RelativeLayout "No se pudo resolver el recurso ..." Android
  • Centrado vertical en RelativeLayout anidado dentro de un ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.