Wie zeige ich Toast in Android an?

446

Ich habe einen Schieberegler, der hochgezogen werden kann, und dann zeigt er eine Karte. Ich kann den Schieberegler nach oben und unten bewegen, um die Karte auszublenden oder anzuzeigen. Wenn sich die Karte vorne befindet, kann ich Berührungsereignisse auf dieser Karte verarbeiten. Jedes Mal, wenn ich a berühre, AsyncTaskwird a ausgelöst, es lädt einige Daten herunter und erstellt ein Toast, das die Daten anzeigt. Obwohl ich die Aufgabe bei einem Berührungsereignis starte, wird kein Toast angezeigt, bis ich den Schieberegler schließe. Wenn der Schieberegler geschlossen ist und die Karte nicht mehr angezeigt wird, wird die Toastangezeigt.

Irgendwelche Ideen?

Nun 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 onPostExecuteeinen Toast machen

Toast.makeText(app.getBaseContext(),(String)data.result, 
                Toast.LENGTH_SHORT).show();

In neu TestTask(this)ist dies ein Verweis auf MapOverlayund nicht auf MapActivity, also war dies das Problem.

Upvote
quelle
1
Dieser Beitrag wurde vor langer Zeit beantwortet, aber ich denke, mein Kommentar kann noch jemandem helfen. Es gibt eine wohlgeformte Bibliothek im Zusammenhang mit Toast, überprüfen Sie es: stackoverflow.com/a/18280318/1891118
Oleksii K.
2
Fast alles über Toast ... einfaches Tutorial .... hier klicken
Thomas Daniel

Antworten:

849

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 über einen längeren Zeitraum an.

int LENGTH_SHORT Zeigt die Ansichts- oder Textbenachrichtigung für einen kurzen Zeitraum an.

Anpassen Ihres Toasts

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();
Jorgesys
quelle
3
@Elen, Sie benötigen den Aktivitätskontext, um TOASTS zu erstellen, nicht den Anwendungskontext.
Yousha Aleayoub
1
Das Erfordernis eines Aktivitätskontexts ist tatsächlich nicht korrekt. Um Toasts jedoch außerhalb von Aktivitäten (z. B. in einem Systemdienst) zum Laufen zu bringen, muss auf die Hauptschleife zugegriffen werden. Poste meine Lösung.
ChrisCM
7
Wenn Sie es in eine onClick-Methode einfügen, hat das Ersetzen von getActivity () durch getBaseContext () für mich funktioniert.
Edward
@ PhilipBelgrave-Herbert Leider ist dein Link nicht mehr gut.
Ellen Spertus
4
Toast.makeText (MainActivity.this, message, Toast.LENGTH_LONG) .show ();
Shahab Einabadi
83

Erweitern der Aktivität mit baseadapterverwendet dies

Toast.makeText(getActivity(), 
    "Your Message", Toast.LENGTH_LONG).show();

oder wenn Sie Aktivität verwenden oder mainactivity

Toast.makeText(MainActivity.this, 
    "Your Message", Toast.LENGTH_LONG).show();
Cristiana Chavez
quelle
1
Es gibt keinen Basisadapter oder eine Hauptaktivität. Toast wird nur angezeigt, indem Parameterkontext, Nachricht, Dauer lang / kurz übergeben werden
Mahesh
47

Syntax

Toast.makeText(context, text, duration);

Parameterwert

Kontext

getApplicationContext() - Gibt den Kontext für alle Aktivitäten zurück, die in der Anwendung ausgeführt werden.

getBaseContext() - Wenn Sie von einem anderen Kontext innerhalb der Anwendung aus auf den Kontext zugreifen möchten, können Sie darauf zugreifen.

getContext() - Gibt in der Kontextansicht nur die aktuell ausgeführte Aktivität zurück.

Text

text - "STRING" zurückgeben. Wenn kein String, können Sie den Typ cast verwenden.

 (string)num   // type caste

Dauer

Toast.LENGTH_SHORT - Toastverzögerung 2000 ms vordefiniert

Toast.LENGTH_LONG - Toastverzögerung 3500 ms vordefiniert

milisecond - Benutzerdefinierte Millisekunden für Toastverzögerung (z. B. 4000)


Beispiel 1

Toast.makeText(getApplicationContext(), "STRING MESSAGE", Toast.LENGTH_LONG).show();

Beispiel.2

Toast.makeText(getApplicationContext(), "STRING MESSAGE", 5000).show();
Jay Patel
quelle
Benutzerdefinierte Toastverzögerung von 5000 Millisekunden.
Jay Patel
Gute Erklärung, aber Sie benötigen den Aktivitätskontext, um TOASTS zu erstellen, nicht den Anwendungskontext.
Yousha Aleayoub
Nun, eine Besetzung wie (string) num wurde noch nicht in Java eingeführt. Versuchen Sie es mit Integer.toString () oder ähnlichem.
Mostowski Zusammenbruch
2
Die Einstellungsdauer ist für einen Toast nicht möglich, nur die vordefinierten Zeiten LENGTH_SHORT & LENGTH_LONG .
Jorgesys
23

Toasten 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 eine dieser beiden Optionen verwenden müssen.)

Dinesh
quelle
6
Lesen Sie die Dokumentation. Wählen Sie für die Nachrichtendauer entweder Toast.LENGTH_SHORT oder Toast.LENGTH_LONG aus.
Jorgesys
20

Sie können Ihren tost 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();
Mahesh
quelle
1
Richtig - hier sind einige Beispiele aus realen Projekten auf GitHub - codota.com/android/methods/android.widget.Toast/show
drorw
15

Ich habe mehrere Toasts ausprobiert und für diejenigen, denen ihr Toast Fehler gibt, versuchen Sie es

Toast.makeText(getApplicationContext(), "google", Toast.LENGTH_LONG).show();

quelle
14

Es gibt zwei Möglichkeiten, dies zu tun.

Verwenden Sie entweder die eingebaute 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();
Aniket Thakur
quelle
1
Gute Erklärung, aber Sie benötigen den Aktivitätskontext, um TOASTS zu erstellen, nicht den Anwendungskontext.
Yousha Aleayoub
In den Android-Dokumenten wird der Anwendungskontext ausdrücklich erwähnt: "Diese Methode verwendet drei Parameter: den Anwendungskontext, die Textnachricht und die Dauer des Toasts. Sie gibt ein ordnungsgemäß initialisiertes Toast-Objekt zurück."
lgunsch
9

Ich bin hier auf die Antworten gestoßen und war von der Tatsache angezogen, dass anscheinend jemand herumstochert und glaubt, dass ein Aktivitätskontext erforderlich ist. Das ist nicht der Fall. Es ist jedoch erforderlich, dass ein Toast vom Hauptereignis oder UI-Thread veröffentlicht wird. Es ist also etwas schwierig, dies außerhalb eines Aktivitätskontexts zum Laufen zu bringen. Hier ist ein Beispiel, das innerhalb eines Systemdienstes oder einer potenziellen Klasse funktioniert, von der letztendlich geerbt wird Context.

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 benötigen, Activitydamit dies funktioniert. Bitte hören Sie auf, dies vorzuschlagen! Wenn dies Activityerforderlich wäre, würde die Methodensignatur kein a erfordern Context.

ChrisCM
quelle
8
Toast.makeText(app.getBaseContext(),"your string",Toast.LENGTH_SHORT).show();

anstatt "app.getBaseContext ()" zu verwenden.

Sie können versuchen, " getApplicationContext () " oder " getContext () zu verwenden. " zu verwenden.

Wenn Ihr Code aktiv ist, sollten Sie "this" von "Activty.this" verwenden.
Wenn Ihr Code fragmentiert ist, sollten Sie "getActivity ()" wählen.

Yogesh Nandha
quelle
7

Wenn es ein Fragment ist,

Toast.makeText(getActivity(), "this is my Toast message!!! =)",
                   Toast.LENGTH_LONG).show();
Hash
quelle
6

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();
Anurag
quelle
5
 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**
Gowtham Chandrasekaran
quelle
5

Einfacher Weg

toast("Your Message")

ODER

toast(R.string.some_message)

Fügen Sie einfach zwei Methoden hinzu BaseActivity. Oder erstellen BaseActivitySie eine neue, wenn Sie diese 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
Khemraj
quelle
3

Einfachster Weg! (Um in Ihrer Hauptaktivität angezeigt zu werden, 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();
    }
}
devDeejay
quelle
2

Das hat bei mir funktioniert:

Toast.makeText(getBaseContext(), "your text here" , Toast.LENGTH_SHORT ).show();

quelle
2

Geben Sie hier die Bildbeschreibung ein

Muss lesen: Android Toast Beispiel

Syntax

Toast.makeText(context, text, duration);

Sie können getApplicationContext () oder getActivity () oder MainActivity.this verwenden (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();
Athira Reddy
quelle
2

Die ersten Schritte

Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
Dary
quelle
1

Toast vom Service anzeigen

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 die showToastMethode auch in Ihre Anwendungsklasse einfügen und von überall aus Toast anzeigen.

Khemraj
quelle
1

Wenn Sie in Ihrer Aktivität einen einfachen Toast schreiben möchten: Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();

1. Textansicht 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 anzeigen: -

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

Deepya
quelle
1

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

Wo Toastist:

Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();

& strings.xml:

<string name="refresh_btn_pushed">"Refresh was Clicked..."</string>

Jadeye
quelle
1

Innerhalb von Fragmenten (onCreateView)

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

Innerhalb von Klassen (onCreate)

Toast.makeText(myClassName.this, "your message" , Toast.LENGTH_LONG).show();

MoniFern
quelle