Usar Toast dentro de Fragmento

3 minutos de lectura

Estoy tratando de mostrar un mensaje de brindis cuando el usuario hace clic en un botón dentro de un fragmento. El problema es que no puedo acceder a la actividad para mostrar el Toast en ella.

Aquí está la fuente de 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(<The Activity>, "Please long press the key", Toast.LENGTH_LONG );

            }});

            return sv;
        }

y Esto es lo que he probado.

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

En Debug puedo ver que todos estos códigos se ejecutan sin excepción pero no TOAST siendo exhibido.

  • ¿Cuál de tus múltiples intentos es más apropiado? getActivity() o getView.getContext() o… Gracias.

    – Alston

    31 mayo 2019 a las 12:40

  • El problema era otra cosa como se describe en la mejor respuesta.

    – mamadalius

    1 de junio de 2019 a las 9:28

no estas llamando show() sobre el Toast estás creando con makeText().

  • Este pequeño SHOW toma más de 3 horas de mí. Gracias, ahora todo parece hermoso.

    – mamadalius

    26 mayo 2012 a las 22:04


  • Ese es mi error estándar: la buena noticia es que Lint detecta este error a partir de SDK20.

    –Richard Le Mesurier

    9 oct 2012 a las 13:23

  • STupid Me… Ese fue mi error… no llamé a show()

    – John

    21 de septiembre de 2015 a las 13:06

  • ¡Ups! ¡Es demasiado fácil cometer tal error!

    – IWIH

    4 de diciembre de 2015 a las 11:07

  • Utilicé la sintaxis correcta, pero el brindis no apareció en el dispositivo móvil. Lo probé en el emulador, funcionó.

    – Prabs

    30 de julio de 2019 a las 9:51

avatar de usuario
Senimii

Según lo declarado por alfo888_ibg:

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

Solo haz:

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

esto funcionó para mí.

  • Estoy usando el brindis dentro de onCreateView del archivo java de Fragment. Toast se llama dos veces. ¿Por qué? Toast.makeText(getContext(), "Entered onCreateView", Toast.LENGTH_SHORT).show(); También he usado getActivity() en lugar de getContext()… el mismo problema

    – NullByte08

    23 de noviembre de 2019 a las 7:27


avatar de usuario
alfo888_ibg

Para ayudar a otras personas con mi mismo problema, la respuesta completa a Use Toast inside Fragment es:

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

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

Al hacer un brindis en fragmento, haga lo siguiente:

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

Cuando la clase está extendiendo un fragmento, es necesario usar obtenerActividad() ya que el fragmento es un subclase de actividad

queso

avatar de usuario
andy bit1

Puede obtener la actividad actual con getActivity()

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

Hacer un brindis dentro de un fragmento

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

O

    Activity activityObj = this.getActivity();

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

O

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

avatar de usuario
codificador

Si está utilizando kotlin, el contexto ya estará definido en el fragmento. Así que solo usa ese contexto. Pruebe el siguiente código para mostrar un mensaje de brindis.

Toast.makeText(context , "your_text", Toast.LENGTH_SHORT).show()

¿Ha sido útil esta solución?