FragmentTransaction.remplacer les() ne fonctionne pas
J'ai un ListFragment
l'affichage d'une liste des éléments créés par l'utilisateur. J'ai un ListView
avec l'id de la valeur "@android:id/liste" et une TextView
avec l'id "@android:id/vide".
J'ai une barre d'action bouton pour afficher un fragment de permettre à l'utilisateur de créer plusieurs entrées de la liste. Voici la onOptionsItemSelected()
méthode:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Fragment frag = null;
//Right now I only have code for the addCourse() fragment, will add more soon
switch (item.getItemId()) {
case R.id.addCourse:
frag = new AddCourseFragment();
break;
default:
return super.onOptionsItemSelected(item);
}
//The support library is being dumb and replace isn't actually
getFragmentManager().beginTransaction()
.remove(this).add(getId(), frag).addToBackStack(null).commit();
return true;
}
La AddCourseFragment code est comme suit:
public class AddCourseFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_addcourse, container, false);
// if (view.findViewById(R.id.timesFrame)!=null) {
Fragment timesFrag = new TimesFragment();
getChildFragmentManager().beginTransaction()
.add(R.id.timesFrame, timesFrag).commit();
// }
return view;
}
}
Comme prévu, lorsque la liste est vide, android affiche le texte dans la TextView
. Je puis cliquez sur le bouton ajouter un cours et ce qui se passe:
Il montre la zone de texte vide, ainsi que le nouveau fragment.
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire.
Selon cette lorsque vous devez ajouter
Fragments
par programme, vous devez les ajouter à unViewGroup
.J'ai donc enlevé le
Fragment
à partir du xml et utiliséFrameLayout
composant dans lereplace()
méthode.Vous pouvez également jeter un oeil ici.
Espère que cette aide.
Un autre problème qui a résolu le problème dans mon cas ont été diffentent API importations.
Assurez-vous que vous utilisez "de soutien.v4" ou de "l'original" les implémentations de l'API 11 et ne pas les mélanger. (cela peut arriver, dans mon cas: TransactionManager était v4 et l'Activité d'une ancienne version, ou l'inverse)
Donner une couleur de fond à la page principale de la childFragment.
Comme android:background="#FFFFFF"
Cela a fonctionné pour moi!!!!
Une autre solution est d'utiliser LinearLayout au Lieu de fragment
L'UTILISER comme ceci
J'ai résolu en changeant le RelativeLayout pour un LinearLayout... j'Espère que ça aide!