Ich versuche, eine Toast-Nachricht anzuzeigen, wenn der Benutzer auf eine Schaltfläche in einem Fragment klickt. Das Problem ist, dass ich nicht auf die Aktivität zugreifen kann, um den Toast darauf anzuzeigen.
Hier ist die Quelle von 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;
}
und hier ist, was ich versucht habe.
Toast.makeText( getActivity() , ...
Toast.makeText( getView().getContext() , ...
Toast.makeText( getActivity().getApplicationContext() , ...
Toast.makeText( sv.getContext() , ...
Toast.makeText( sv.getRootView().getContext() , ...
In Debug kann ich sehen, dass alle diese Codes ohne Ausnahme laufen, aber keine TOAST
angezeigt wird.
Sie rufen nicht show()
für die Toast
auf, die Sie mit makeText()
erstellen.
Wie von alfo888_ibg festgestellt:
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
Mach einfach:
Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();
das hat für mich funktioniert.
Um anderen Leuten bei meinem gleichen Problem zu helfen, lautet Die vollständige Antwort auf Toast in Fragment verwenden lautet:
Activity activity = getActivity();
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
Wenn Sie einen Toast in Fragment machen, gehen Sie wie folgt vor:
Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();
Wenn die Klasse ein Fragment erweitert, muss getActivity () verwendet werden, da das Fragment eine Unterklasse der Aktivität ist.
Cheerse
Sie können die aktuelle Aktivität mit getActivity () abrufen.
Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();
Einen Toast im Fragment machen
Toast.makeText(getActivity(), "Your Text Here!", Toast.LENGTH_SHORT).show();
OR
Activity activityObj = this.getActivity();
Toast.makeText(activityObj, "Your Text Here!", Toast.LENGTH_SHORT).show();
OR
Toast.makeText(this, "Your Text Here!", Toast.LENGTH_SHORT).show();
user2564789 hat es richtig gesagt
Sie können jedoch auch this
anstelle von getActivity()
verwenden.
wodurch Ihr Toast so aussieht
Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();
Wenn Sie Toast in einem Android-Fragment aufrufen:
1. Activity mActivity=this.getActivity();
2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show();
Das funktioniert für mich.
(Funktioniert für Dialog, Fragment, Even Util usw.)
ApplicationContext.getInstance().toast("I am toast");
Fügen Sie den folgenden Code in der Anwendungsklasse entsprechend hinzu.
public class ApplicationContext extends Application {
private static ApplicationContext instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static void toast(String message) {
Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
}
}