Comment puis-je montrer un nouveau Fragment dans un seul onglet?
Je suis entrain de créer un trois onglets qui contient un fragment chaque maintenant je veux remplacer le premier Onglet du Fragment avec un nouveau Fragment dans le même Onglet. Comment puis-je faire avec l'onglet reste la même?
Mon Code -
Tab_Widget.java
public class Tab_Widget extends TabActivity {
TabHost tabHost;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_host);
tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("Tab1")
.setIndicator("Tab1")
.setContent(new Intent().setClass(this, main_activity.class)));
tabHost.addTab(tabHost.newTabSpec("Tab2")
.setIndicator("Tab2")
.setContent(new Intent().setClass(this, second_activity.class)));
tabHost.addTab(tabHost.newTabSpec("Tab3")
.setIndicator("Tab3")
.setContent(new Intent().setClass(this, third_activity.class)));
tabHost.setCurrentTab(0);
}
}
main_activity.java
public class main_activity extends FragmentActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainfragment);
}
}
main_fragment.java
public class main_fragment extends Fragment
{
LinearLayout mLayout;
Button mButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mLayout = (LinearLayout) inflater.inflate(R.layout.main_view, null);
mButton = (Button) mLayout.findViewById(R.id.btn);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Fragment mFragment = new third_fragment_view();
FragmentTransaction ft = getFragmentManager().beginTransaction();
// ft.replace(R.id.Maincontainer, mFragment);
ft.replace(R.id.main_fragment, mFragment);
ft.addToBackStack(null);
ft.commit();
}
});
return mLayout;
}
}
Mon XML
mainfragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Maincontainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:name="com.fragment.main_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_fragment">
</fragment>
</LinearLayout>
Par, ce Fragment est appelé sans doute, mais son imbrication du Fragment précédent.
OriginalL'auteur Lalit Poptani | 2011-08-01
Vous devez vous connecter pour publier un commentaire.
Vous avez une structure comme ceci:
De l'intérieur de
MainFragment
vous essayez de remplacer le contenu de son récipient (lui-même).Il serait mieux si le
MainFragment
appelé personnalisée TabActivity qui à son tour appelé à remplacer sur le récipient, soit comme (ce Qui pourrait probablement tomber sous le coup de le même problème que c'est principalement à l'exécution du même code à partir de la même place, mais il devrait vous donner une idée de base de ce que je dis):Si cela ne fonctionne pas, essayez de faire une chose de similaire, mais au lieu de suivre l'activité de passer directement des commandes à travers les Intentions & Actions (ou des lots) contenant des informations sur ce que pour changer de conteneur.
J'aurais préféré dire /pourquoi/Fragments ne fonctionnent pas bien avec le Fragment en fragment et de la relative complexité: vérifier ici pour voir pourquoi je suggère de coupe fragments du contrôle de fragments.
Votre mauvaise compréhension. Vous ÊTES à l'aide d'un fragment de remplacer lui-même. Au mieux c'est source de confusion et de mauvaise pratique, au pire, elle ne travaillera plus jamais (Malheureusement, les fragments ne sont pas les plus translucide processus). Créer un système dans lequel un fragment communique avec son conteneur pour l'obtenir, afin de remplacer son enfant avec quelque chose d'autre.
Oui, maintenant je l'ai eu que des Fragments ne peut remplacer lui-même, Merci. 🙂
OriginalL'auteur Graeme
OK, plusieurs choses:
Vous n'avez pas besoin de remplacer les deux et retirez-la. Remplacer efficacement supprime juste le premier fragment et ajoute le deuxième à sa place.
Je suppose que vos arguments sont incorrects pour la commande de remplacement. C'est la bonne forme:
Vous semblent être en train de passer l'id de l'fragment de lui-même, plutôt que l'id du conteneur. La commande de remplacement prend l'id du conteneur de vue et supprime tous les fragments dans le conteneur avant d'en ajouter un nouveau. Donc, si c'était votre disposition:
Vous utilisez:
et pas
Depuis que vous essayez de
findFragmentById(R.id.main_fragment)
, je pense que vous avez ajouté ce fragment de XML fichier de mise en page. Si vous avez un fragment ajouté directement dans le fichier XML, vous ne pouvez pas supprimer par programme au moment de l'exécution. Afin de supprimer ou de remplacer des fragments, vous devez avoir ajouté avec un FragmentTransaction au moment de l'exécution.EDIT:
Numéros 2 et 3 de ma réponse originale à cette question s'appliquent toujours. Vous devez utiliser l'id de l'contenant ViewGroup pour l'ajout et remplacement. Dans ce cas, c'est votre LinearLayout, R. id.Maincontainer, pas R. id.main_fragment.
Aussi, comme je l'ai dit avant, vous ne pouvez pas supprimer des fragments que vous avez ajoutés directement dans le XML. Votre
main_fragment
est ajouté dans le fichier XML et donc ne peut pas être supprimé au moment de l'exécution.Essayez ceci pour votre mainfragment.xml:
Et ce pour votre main_fragment classe:
OriginalL'auteur theisenp
@theisenp je suis entrain de créer un onglet vue que lorsqu'on clique sur un bouton, il faut passer à un autre écran quand j'essaie de la mettre en œuvre à l'aide du code ci-dessus, il est en train de changer à un autre écran, mais le bouton est toujours visible à l'écran suivant et je veux écran suivant doit recouvrir la totalité de l'écran
OriginalL'auteur Ghouse