Toast à l'intérieur onClick méthode du Fragment
J'ai un Fragment suivant:
public class FragmentSocial extends Fragment implements ActionBar.TabListener, OnClickListener
{
private Fragment mFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setContentView(R.layout.fragment_social);
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
//relevant code...
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
//relevant code...
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//TODO Auto-generated method stub
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.imgBtnFB:
Toast.makeText(this, "FB pressed", Toast.LENGTH_LONG).show();
break;
case R.id.imgBtnTwitter:
Toast.makeText(this, "Twitter pressed", Toast.LENGTH_LONG).show();
break;
}
}
J'ai quelques boutons image dans mon fragment_social
mise en page. Pour l'instant, je veux juste faire un Toast message pour voir quel bouton a été pressé. Cependant, si j'utilise this
que le contexte, je reçois ce message d'erreur:
La méthode makeText(Contexte, CharSequence, int) dans le type Toast n'est pas applicable pour les arguments (FragmentSocial, String, int)
J'ai essayé de changer this
à FragmentSocial.this
, à FragmentSocial.this.getActivity()
, essayé de créer private Context mContext
et de l'instancier pour mContext = (I tried various options here)
à l'intérieur de la méthode onCreate - mais rien n'a fonctionné. Soit je n'ai pas eu de message d'erreur, mais aussi de ne pas voir les Toasts, ou en a d'autres erreurs.
Alors, comment puis-je créer un Toast ici?
Merci!
OriginalL'auteur Igal | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
utilisation:
Toast.makeText(getActivity().getBaseContext(), "FB pressed", Toast.LENGTH_LONG).show();
? Il a essayé, ne fonctionne toujours pas... Aussi essayéToast.makeText(FragmentSocial.this.getActivity().getBaseContext(), "FB pressed", Toast.LENGTH_LONG).show();
- à ne pas travailler, de ne pas voir le Toast.la droite. cela devrait fonctionner. Mettre Le Journal.d("test", "test") à l'intérieur de la onClick() et voir si vous avez un message dans le Logcat. Vous saurez alors si votre onClick() la méthode est appelée ou non.
Nop, je n'ai pas vu le message de Journal. Suppose que je suis en train de faire quelque chose de mal ici... j'ai aussi essayé de faire quelque chose comme ça dans la méthode onCreate:
findViewById(R.id.imgBtnFB).setOnClickListener(this);
mais je n'ai même pas lefindViewById
méthode disponible pour une raison quelconque.Essayez de gonfler votre disposition à partir de onCreateView():
Supprimer tout de onCreate (gardez super seulement) et de créer onCreateView() comme ceci: @Override public onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Affichage = inflater.inflate(R. layout.fragment_social, conteneur, false); return; }
OriginalL'auteur Marcin S.
Si vous utilisez fragment ensuite utiliser ce code
OriginalL'auteur Ram Kishore Prajapati
L'une des lignes suivantes de travail.
OriginalL'auteur Ayush Goyal
C'est la façon dont je le fais dans le fragment
//edit
OriginalL'auteur Intathep
L'extension de la réponse par Marcin S., vous pouvez également configurer le constructeur à l'intérieur du Fragment et de passer à une variable de contexte. Vous pouvez ensuite utiliser ce contexte, quand vous le souhaitez pour référence l'activité. Cette méthode est également légèrement plus rapide que la
getActivity().getBaseContext()
Ajouter à votre FragmentSocial classe:
Quand vous dites jamais
FragmentSocial fragmentSocial = new FragmentSocial();
dans votre activité principale catégorie, ajoutez le paramètrethis
dans le()
pour la faire ressembler àFragmentSocial fragmentSocial = new FragmentSocial(this);
Vérifier mon révisé réponse.
Je l'ai essayé et ai ce message d'erreur: d'Éviter la non-constructeurs par défaut dans les fragments: l'utilisation d'un constructeur par défaut plus Fragment#setArguments(Bundle) au lieu j'ai également eu à créer un constructeur vide, comme je l'avais plus d'erreurs (j'ai ce code dans mon onTabSelected méthode -
mFragment = new FragmentSocial();
)OriginalL'auteur Adam