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