Je suis nouveau sur Android en développement et bien sûr sur Fragments.
Je souhaite accéder aux commandes de mon fragment dans l'activité principale, mais 'findViewById' renvoie la valeur null . Sans fragment, le code fonctionne correctement.
Voici une partie de mon code:
Le fragment :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
tools:ignore="HardcodedText" >
<EditText
Android:id="@+id/txtXML"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:ems="10"
Android:scrollbars="vertical">
</EditText>
</LinearLayout>
le onCreate of MainActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.initialisePaging();
EditText txtXML = (EditText) findViewById(R.id.txtXML);}
sur ce point le txtXML est nul.
Que manque-t-il dans mon code ou que dois-je faire?
Vous devriez inflate
la disposition du fragment sur la méthode onCreateView
de la Fragment
, vous pouvez simplement accéder à ses éléments avec findViewById
sur votre Activity
.
Dans cet exemple, ma mise en page de fragment est un LinearLayout, aussi jette-t-elle le résultat inflate
en LinearLayout.
public class FrgResults extends Fragment
{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//some code
LinearLayout ll = (LinearLayout)inflater.inflate(R.layout.frg_result, container, false);
//some code
return ll;
}
}
Essayez comme ça sur vos fragments sur onCreateView
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
LinearLayout ll = (LinearLayout )inflater.inflate(R.layout.tab_frag1_layout, container, false);
EditText txtXML = (EditText) ll.findViewById(R.id.txtXML);
return ll;
}
Je suis en retard, mais pour quiconque ayant ce problème. Vous devriez gonfler votre vue dans la méthode onCreateView. Puis substituez la méthode onCreateActivity
et vous pourrez utiliser getView().findViewById
ici.
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.fragment, container, false);
}
Vous ne pouvez pas accéder à la vue du fragment dans la classe d'activité par findViewById
à la place. Ce que vous pouvez faire est ...
Vous devez avoir un objet de classe Fragment dans votre fichier d'activité, n'est-ce pas? Créez la méthode getter de la classe EditText dans cette classe de fragments et accédez à cette méthode dans votre activité.
créer un rappel dans la classe Fragment sur l'événement pour lequel vous avez besoin de l'objet Edittext obj.
1) Essayez ceci:
Menu Eclipse -> Projet -> Nettoyer ...
mettre à jour
2) Si vous avez 2 instances ou plus de disposition 'principale', vérifiez si toutes ont une vue avec l'id 'txtXML'
3)
Un fragment est un élément de l'interface utilisateur ou du comportement d'une application pouvant être placé dans une activité. L'interaction avec les fragments est effectuée via FragmentManager, qui peut être obtenu via Activity.getFragmentManager () et Fragment.getFragmentManager ().
La classe Fragment peut être utilisée de différentes manières pour obtenir une grande variété de résultats. C’est le cœur, il représente une opération ou une interface particulière exécutée dans une activité plus grande. Un fragment est étroitement lié à l'activité dans laquelle il se trouve et ne peut pas être utilisé séparément. Bien que Fragment définisse son propre cycle de vie, celui-ci dépend de son activité: si l'activité est arrêtée, aucun fragment à l'intérieur de celle-ci ne peut être démarré; lorsque l'activité est détruite, tous les fragments seront détruits.
Etudiez ceci . vous devez utiliser FragmentManager.
Si vous souhaitez utiliser findViewById lors d'activités onCreate, vous pouvez simplement mettre toutes les méthodes surchargées surActivityCreated.