Ich habe einen Schieberegler, der hochgezogen werden kann und dann eine Karte zeigt. Ich kann den Schieberegler nach oben und unten bewegen, um die Karte ein- oder auszublenden. Wenn die Karte vorne ist, kann ich Berührungsereignisse auf dieser Karte handhaben. Bei jedem Berühren wird eine AsyncTask
gestartet, es lädt einige Daten herunter und erstellt eine Toast
, die die Daten anzeigt. Obwohl ich die Aufgabe bei einem Berührungsereignis starte, wird kein Toast angezeigt, nicht bis ich den Schieberegler schließe. Wenn der Schieberegler geschlossen ist und die Karte nicht mehr angezeigt wird, erscheint die Variable Toast
.
Irgendwelche Ideen?
Starten Sie die Aufgabe
BEARBEITEN:
public boolean onTouchEvent(MotionEvent event, MapView mapView){
if (event.getAction() == 1) {
new TestTask(this).execute();
return true;
}else{
return false;
}
}
und in onPostExecute
einen Toast machen
Toast.makeText(app.getBaseContext(),(String)data.result,
Toast.LENGTH_SHORT).show();
In new TestTask(this)
ist dies eine Referenz auf MapOverlay
und nicht auf MapActivity
, daher war dies das Problem.
Versuchen Sie Folgendes, um Toast in Ihrer Anwendung anzuzeigen:
Toast.makeText(getActivity(), (String)data.result,
Toast.LENGTH_LONG).show();
Ein anderes Beispiel:
Toast.makeText(getActivity(), "This is my Toast message!",
Toast.LENGTH_LONG).show();
Wir können zwei Konstanten für die Dauer definieren:
int LENGTH_LONG Zeigt die Ansicht oder Textbenachrichtigung für einen langen Zeitraum an von Zeit.
int LENGTH_SHORT Zeigt die Ansicht oder Textbenachrichtigung für einen kurzen Zeitraum an von Zeit.
LayoutInflater myInflater = LayoutInflater.from(this);
View view = myInflater.inflate(R.layout.your_custom_layout, null);
Toast mytoast = new Toast(this);
mytoast.setView(view);
mytoast.setDuration(Toast.LENGTH_LONG);
mytoast.show();
Beim Erweitern der Aktivität mit baseadapter
wurde dies verwendet
Toast.makeText(getActivity(),
"Your Message", Toast.LENGTH_LONG).show();
oder wenn Sie Aktivität oder mainactivity
verwenden
Toast.makeText(MainActivity.this,
"Your Message", Toast.LENGTH_LONG).show();
Toast.makeText(context, text, duration);
getApplicationContext()
- Gibt den Kontext für alle Aktivitäten zurück, die in der Anwendung ausgeführt werden.
getBaseContext()
- Wenn Sie auf Kontext aus einem anderen Kontext in der Anwendung zugreifen möchten, können Sie darauf zugreifen.
getContext()
- Gibt nur die aktuelle laufende Aktivität der Kontextansicht zurück.
text
- Gibt "STRING" zurück. Wenn keine Zeichenfolge vorhanden ist, können Sie die Typumwandlung verwenden.
(string)num // type caste
Toast.LENGTH_SHORT
- Toastverzögerung 2000 ms vordefiniert
Toast.LENGTH_LONG
- Toastverzögerung 3500 ms vordefiniert
milisecond
- Vom Benutzer definierte Toastverzögerung in Millisekunden (z. B. 4000)
Beispiel 1
Toast.makeText(getApplicationContext(), "STRING MESSAGE", Toast.LENGTH_LONG).show();
Beispiel.2
Toast.makeText(getApplicationContext(), "STRING MESSAGE", 5000).show();
Toast in Android
Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_SHORT).show();
oder
Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_LONG).show();
(LENGTH_SHORT und LENGTH_LONG fungieren als boolesche Flags. Dies bedeutet, dass Sie keinen Toast-Timer in Millisekunden senden können, aber Sie müssen eine dieser beiden Optionen verwenden.)
Sie können Ihre Aufgaben anpassen:
LayoutInflater mInflater=LayoutInflater.from(this);
View view=mInflater.inflate(R.layout.your_layout_file,null);
Toast toast=new Toast(this);
toast.setView(view);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
Oder allgemeiner weg:
Toast.makeText(context,"Your message.", Toast.LENGTH_LONG).show();
Ich habe mehrere Toasts ausprobiert und für diejenigen, denen der Toast Fehler macht, versuchen Sie es
Toast.makeText(getApplicationContext(), "google", Toast.LENGTH_LONG).show();
Es gibt zwei Möglichkeiten, dies zu tun.
Verwenden Sie entweder die integrierte Toast-Nachricht
//Toast shown for short period of time
Toast.makeText(getApplicationContext(), "Toast Message", Toast.LENGTH_SHORT).show();
//Toast shown for long period of time
Toast.makeText(getApplicationContext(), "Toast Message", Toast.LENGTH_LONG).show();
oder erstellen Sie eine benutzerdefinierte, indem Sie eine benutzerdefinierte Layoutdatei bereitstellen
Toast myToast = new Toast(getApplicationContext());
myToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(myLayout);
myToast.show();
Ich bin hier auf die Antworten gestoßen und wurde von der Tatsache angezogen, dass es so aussieht, als ob jemand herumstochert und glaubt, dass ein Aktivitätskontext erforderlich ist. Das ist nicht der Fall. Voraussetzung ist jedoch, dass ein Toast vom Hauptereignis oder vom UI-Thread gebucht wird. Daher ist es etwas schwierig, dies außerhalb eines Aktivitätskontextes zu erreichen. Hier ist ein Beispiel, das in einem Systemdienst oder einer potenziellen Klasse funktioniert, die letztendlich von Context
erbt.
public class MyService extends AccessibilityService {
public void postToastMessage(final String message) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
});
}
}
Beachten Sie, dass wir keinen Zugriff auf eine Instanz von Activity
benötigen, damit dies funktioniert. Bitte hör auf zu behaupten, dass dies der Fall ist! Wenn Activity
erforderlich wäre, würde die Methodensignatur keine Context
aufrufen.
Wenn es ein Fragment ist,
Toast.makeText(getActivity(), "this is my Toast message!!! =)",
Toast.LENGTH_LONG).show();
Toast.makeText(app.getBaseContext(),"your string",Toast.LENGTH_SHORT).show();
anstatt "app.getBaseContext ()" zu verwenden.
Sie können versuchen, " getApplicationContext () " oder " getContext () " zu verwenden.
Wenn Ihr Code aktiv ist, sollten Sie "this" von "Activty.this" verwenden.
Wenn Ihr Code fragmentiert ist, sollten Sie "getActivity ()" wählen.
Verwenden Sie zum Anzeigen von Toast den folgenden Code:
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
Toast toast=Toast.makeText(getApplicationContext(),"Hello", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0); // last two args are X and Y are used for setting position
toast.setDuration(10000);//you can even use milliseconds to display toast
toast.show();**//showing the toast is important**
toast("Your Message")
OR
toast(R.string.some_message)
Fügen Sie einfach zwei Methoden in Ihr BaseActivity
ein. Oder erstellen Sie ein neues BaseActivity
, wenn Sie es noch nicht verwenden.
public class BaseActivity extends AppCompatActivity {
public void toast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
public void toast(@StringRes int msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
und erweitern Sie alle Ihre Aktivitäten um BaseActivity
.
public class MainActivity extends BaseActivity
Syntax
Toast.makeText(context, text, duration);
Sie können getApplicationContext () oder getActivity () oder MainActivity.this (wenn der Aktivitätsname MainActivity ist)
Toast.makeText(getApplicationContext(),"Hi I am toast",Toast.LENGTH_LONG).show();
oder
Toast.makeText(MainActivity.this,"Hi I am Toast", Toast.LENGTH_LONG).show();
Einfachster Weg! (Um in Ihrer Hauptaktivität anzuzeigen, ersetzen Sie das erste Argument für eine andere Aktivität.)
Button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(MainActivity.this,"Toast Message",Toast.LENGTH_SHORT).show();
}
}
Das hat für mich funktioniert:
Toast.makeText(getBaseContext(), "your text here" , Toast.LENGTH_SHORT ).show();
Hier ist ein anderes:
refreshBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();
}
});
Wobei Toast
ist:
Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();
& strings.xml
:
<string name="refresh_btn_pushed">"Refresh was Clicked..."</string>
Wenn Sie in Ihrer Aktivität einen einfachen Toast schreiben möchten: Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();
1. TextView in Toast anzeigen: ---
TextView tv = new TextView(this);
tv.setText("Hello!");
tv.setTextSize(30);
tv.setTextColor(Color.RED);
tv.setBackgroundColor(Color.YELLOW);
2.Bild als Toast zeigen: -
ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.blonde);
Toast t = new Toast(this);
t.setView(iv);
t.setDuration(Toast.LENGTH_LONG);
t.show();
3. Layout als Toast anzeigen: -
LayoutInflater li = getLayoutInflater();
View view = li.inflate(R.layout.my_toast_layout,null,false);
Toast t = new Toast(this);
t.setView(view);
t.setDuration(Toast.LENGTH_LONG);
t.show();
** Wenn Sie den Toast in Ihrem Async schreiben möchten, dann: private Activity activity;
private Android.content.Context context;
this.activity = activity;
this.context = context;
Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();
public class ServiceA extends Service {
//....
public void showToast(final String message) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
//....
}
Sie können auch die showToast
-Methode in Ihre Application-Klasse einfügen und den Toast von überall aus anzeigen.