usar studio personalizado mensaje maketext getapplicationcontext como activity android android-fragments android-activity toast

android - studio - Use tostadas dentro de Fragment



toast maketext getapplicationcontext() (10)

Intento mostrar un Mensaje de Toast 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 intentado.

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

En Depurar puedo ver que todos estos códigos se ejecutan sin excepción, pero no se muestra TOAST .


Al hacer un brindis en fragmento, haga lo siguiente:

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

Cuando la clase está extendiendo fragmento, es necesario usar getActivity () ya que el fragmento es una subclase de actividad.

Cheerse


Cuando llamas a Toast dentro de un fragmento de Android:

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

Esto funciona para mí


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();


Hola, he visto algunos usuarios que ya han recibido una respuesta. Aún así, creo que esta información puede ser útil para los programadores de Android.

Nunca use getActivity() o getContext() en su respuesta api. Porque puede ser null algún momento si tu fragmento es reemplazado antes de que llegue la respuesta de API.

y viene el error

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

En su lugar, use una clase de aplicación para mostrar tostadas. me gusta

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(String data) { Toast.makeText(getContext(), data, Toast.LENGTH_SHORT).show(); } }

Si necesita Activity instance en fragmento, puede crear una base class y ampliarla con todos sus fragmentos.

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; } }

y use getBaseProject() lugar de getActivity() . Porque nunca te dará null .


No está llamando a show() en el Toast que está creando con makeText() .


Para ayudar a otras personas con mi mismo problema, la respuesta completa para usar Toast dentro de Fragment es:

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


Puede obtener la actividad actual con getActivity ()

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


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í.


user2564789 dijo que es correcto
Pero también puedes usar this en lugar de getActivity()
que hará que tu pan tostado se vea así

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


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(); }