Android: Fragment ne peut pas obtenir d'activité
J'ai une activité qui n'est qu'un fragment de transaction
DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transaction.addToBackStack(null);
transaction.commit();
qui fonctionne très bien. Maintenant, je sais que dans mon activité une chaîne dynamique j'ai besoin de remplacer, dans la mise en page que j'ai dans newFragment. J'ai pensé que je peux appeler après la transaction.commit() juste quelque chose comme
newFragment.setMyString("my dynamic value");
Et dans le newFragment.java j'ai
public void setMyString(String s)
{
TextView tv = (TextView) getActivity().findViewById(R.id.myobject);
tv.setText(s);
}
Le point est que getActivity() renvoie la valeur null. Comment puis-je obtenir le contexte, j'ai besoin de trouver ma éléments de mise en page?
Edit:
J'essaie de suivre l'itinéraire à l'aide d'un bundle comme cela semble être la façon la plus propre. J'ai donc modifié mon code:
Bundle b = new Bundle();
b.putString("text", "my dynamic Text");
DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transaction.addToBackStack(null);
transaction.commit();
Mon fragment onCreateView ressemble à ceci:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.mylayout, container, false);
TextView t = (TextView) v.findViewById(R.id.texttobereplaced);
t.setText(savedInstanceState.getString("text");
}
Il semble que savedInstranceState est vide. Où dois-je trouver mon paquet?
Edit2:
raté le getArguments() dans la réponse. fonctionne maintenant.
Vous devez vous connecter pour publier un commentaire.
Votre
Fragment
n'a pas attaché à l'Activity
encore, ce qui signifie aussi que votre mise en page n'a pas été gonflé encore (Voir le Fragment du cycle de vie). La meilleure solution serait d'ajouter votreString
valeur comme argument de laFragment
via leFragment.setArguments(Bundle)
méthode. Cela peut être récupéré de la réception deFragment
via leFragment.getArguments()
méthode.Assurez-vous que vous appelez
getActivity()
ou aprèsonAttach()
, comme avant, alors il sera de retournull
.Fragment
sera attaché à unnull
activité jusqu'à ce queonActivityCreated
... qui est, si vous appelezgetActivity()
dansonCreate
ouonCreateView
, il sera de retournull
parce que leActivity
n'a pas encore été créé. Donc, assurez-vous d'avoir tous vos appels versgetActivity()
ouonActivityCreated
.getActivity()
aprèsonAttach()
. J'ai édité ma réponse originale à cette adresse... et pour être honnête, je ne suis pas sûr de savoir comment cette réponse obtenu 5 upvotes. Je pense que j'ai été plus d'un noob 2 ans en arrière. 😛Donc, je suis également en utilisant le même fragment gestionnaire de transactions et le seul problème que je peux voir avec ton code, c'est que vous définissez le TextView tv à l'intérieur de votre onCreateView méthode de votre newFragment classe et puis instancier comme ceci :
Je sais qu'il n'a pas vraiment beaucoup de sens mais c'est ce que je suis en cours d'exécution de mon code et il fonctionne très bien 🙂
si u besoin d'appeler getActivity dans OnCreateView, déplacer toutes les ur du code de onCreateView à onActivityCreate et seulement à gauche des lignes
dans onCreateView
mais j'ai une drôle de situation.
dans Mon onActivityCreated
Parfois, le onActivityCreated ne courir (correctement!?) et donc le spinner s1 devenir vide.