Utiliser du pain grillé à l’intérieur du fragment

J’essaie d’afficher un message Toast lorsque l’utilisateur clique sur un bouton dans un fragment. Le problème est que je ne peux pas accéder à l’activité pour montrer le Toast dessus.

Voici la source du Fragment :

  public class FrgTimes extends Fragment { ScrollView sv; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } sv = (ScrollView)inflater.inflate(R.layout.frg_times, container, false); btnTime1.setOnClickListener(new OnClickListener() { public void onClick(View v) { //****** HERE's the PROBLEM ******** Toast.makeText(, "Please long press the key", Toast.LENGTH_LONG ); }}); return sv; } 

Et voici ce que j’ai été essayé.

 Toast.makeText( getActivity() , ... Toast.makeText( getView().getContext() , ... Toast.makeText( getActivity().getApplicationContext() , ... Toast.makeText( sv.getContext() , ... Toast.makeText( sv.getRootView().getContext() , ... 

Dans Debug, je peux voir que tous ces codes s’exécutent sans aucune exception, mais qu’aucun TOAST n’est affiché.

Vous makeText() pas show() sur le Toast vous créez avec makeText() .

Comme indiqué par alfo888_ibg:

 @Override public void onClick(View arg0) { Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show(); } 

Fais juste:

  Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show(); 

Cela a fonctionné pour moi.

Pour aider d’autres personnes avec le même problème, la réponse complète à l’utilisation de Toast dans Fragment est la suivante:

 Activity activity = getActivity(); @Override public void onClick(View arg0) { Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show(); } 

Pour faire un toast en fragment, procédez comme suit:

Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();

Lorsque la classe étend le fragment, il est nécessaire d’utiliser getActivity () car fragment est une sousclasse d’activité.

Cheerse

Vous pouvez obtenir l’activité en cours avec getActivity ()

 Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show(); 

Faire un pain grillé à l’intérieur d’un fragment

  Toast.makeText(getActivity(), "Your Text Here!", Toast.LENGTH_SHORT).show(); 

OU

  Activity activityObj = this.getActivity(); Toast.makeText(activityObj, "Your Text Here!", Toast.LENGTH_SHORT).show(); 

OU

 Toast.makeText(this, "Your Text Here!", Toast.LENGTH_SHORT).show(); 

user2564789 l’a dit correctement
Mais vous pouvez aussi l’utiliser à la place de getActivity()
ce qui fera votre toast ressembler à ceci

 Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show(); 

En appelant Toast dans le fragment Android:

 1. Activity mActivity=this.getActivity(); 2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show(); 

Cela fonctionne pour moi.

Bonjour, j’ai vu certains utilisateurs ont déjà reçu une réponse à la question. Pourtant, je pense que cette information peut être utile pour les programmeurs Android.

N’utilisez jamais getActivity() ou getContext() sur votre réponse api. Parce que cela peut être null si votre fragment est remplacé avant la réponse de l’API.

et l’erreur vient

java.lang.IllegalStateException: Fragment MyFragment{410f6060} not attached to Activity

Utilisez plutôt une classe Application pour afficher les toasts. comme

 public class ApplicationContext extends Application { /** Instance of the current application. */ private static ApplicationContext instance; /** * Constructor. */ public ApplicationContext() { instance = this; } /** * Gets the application context. * * @return the application context */ public static Context getContext() { if (instance == null) { instance = new ApplicationContext(); } return instance; } /** * display toast message * * @param data */ public static void showToast(Ssortingng data) { Toast.makeText(getContext(), data, Toast.LENGTH_SHORT).show(); } } 

Si vous avez besoin d’une Activity instance dans fragment, vous pouvez créer une base class et l’étendre avec tous vos fragments.

 public class BaseProjectFragment extends Fragment private BaseProject baseProject; public BaseProject getBaseProject() { if (baseProject == null) baseProject = (BaseProject) getBaseProject(); return baseProject; } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof BaseProject) { baseProject = (BaseProject) context; } } 

et utilisez getBaseProject() au lieu de getActivity() . Parce que ça ne te donnera jamais rien.

  public void onClick(View v) { Context context = v.getContext(); CharSequence text = "Message"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); }