Jak wyświetlić Toast w Androidzie?

446

Mam suwak, który można podciągnąć, a następnie pokazuje mapę. Mogę przesuwać suwak w górę iw dół, aby ukryć lub pokazać mapę. Gdy mapa jest z przodu, mogę obsługiwać zdarzenia dotykowe na tej mapie. Za każdym razem, gdy się dotykam, a AsyncTaskjest uruchamiany, pobiera niektóre dane i Toastwyświetla je. Chociaż uruchamiam zadanie po zdarzeniu dotykowym, toast nie jest wyświetlany, dopóki nie zamknę suwaka. Gdy suwak jest zamknięty, a mapa nie jest już wyświetlana, Toastpojawia się.

Jakieś pomysły?

Cóż, zacznij zadanie

EDYTOWAĆ:

public boolean onTouchEvent(MotionEvent event, MapView mapView){ 
    if (event.getAction() == 1) {
        new TestTask(this).execute();
        return true;            
    }else{
        return false;
    }
 }

i onPostExecutezrobić toast

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

W nowym TestTask(this)jest to odniesienie do, MapOverlaya nie do MapActivity, więc to był problem.

Głosuj
źródło
1
dawno temu odpowiedziano na ten post, ale myślę, że mój komentarz może komuś pomóc. istnieje dobrze uformowana biblioteka związana z Toast, sprawdź to: stackoverflow.com/a/18280318/1891118
Oleksii K.
2
Prawie wszystko o Toast ... prosty samouczek .... kliknij tutaj
Thomas Daniel

Odpowiedzi:

849

Aby wyświetlić Toast w aplikacji, spróbuj:

Toast.makeText(getActivity(), (String)data.result, 
   Toast.LENGTH_LONG).show();

Inny przykład:

Toast.makeText(getActivity(), "This is my Toast message!",
   Toast.LENGTH_LONG).show();

Możemy zdefiniować dwie stałe dla czasu trwania:

int LENGTH_LONG Pokaż widok lub powiadomienie tekstowe przez długi czas.

int LENGTH_SHORT Pokaż widok lub powiadomienie tekstowe przez krótki czas.

Dostosuj swój toast

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
źródło
3
@Elen, potrzebujesz kontekstu działania do tworzenia TOASTÓW, a nie kontekstu aplikacji.
Yousha Aleayoub,
1
W rzeczywistości wymaganie kontekstu działania jest nieprawidłowe. JEDNAK, doprowadzenie toastów do pracy poza zajęciami (na przykład w usłudze systemowej) wymaga dostępu do głównej pętli. Publikowanie mojego rozwiązania.
ChrisCM,
7
Jeśli umieszczasz go w metodzie onClick, zastąpienie getActivity () przez getBaseContext () działało dla mnie.
Edward
@ PhilipBelgrave-Herbert Niestety twój link nie jest już dobry.
Ellen Spertus
4
Toast.makeText (MainActivity.this, wiadomość, Toast.LENGTH_LONG) .show ();
Shahab Einabadi
83

baseadapterWykorzystano to przy rozszerzaniu aktywności

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

lub jeśli korzystasz z aktywności lub mainactivity

Toast.makeText(MainActivity.this, 
    "Your Message", Toast.LENGTH_LONG).show();
Cristiana Chavez
źródło
1
nie ma czegoś takiego jak adapter podstawowy lub główna aktywność, toast wyświetla się tylko poprzez przekazanie kontekstu aplikacji parametru, komunikat, czas trwania / krótki
Mahesh
47

Składnia

Toast.makeText(context, text, duration);

Wartość parametru

kontekst

getApplicationContext() - Zwraca kontekst dla wszystkich działań uruchomionych w aplikacji.

getBaseContext() - Jeśli chcesz uzyskać dostęp do kontekstu z innego kontekstu w aplikacji, do której masz dostęp.

getContext() - Zwraca widok kontekstowy tylko bieżącą działającą aktywność.

tekst

text - Zwraca „STRING”, jeśli nie łańcuch, możesz użyć typu cast.

 (string)num   // type caste

Trwanie

Toast.LENGTH_SHORT - Opóźnienie grzania 2000 ms predefiniowane

Toast.LENGTH_LONG - Wstępnie zdefiniowane opóźnienie toastu 3500 ms

milisecond - Opóźnienie zdefiniowane przez użytkownika milisekund (np. 4000)


Przykład 1

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

Przykład 2

Toast.makeText(getApplicationContext(), "STRING MESSAGE", 5000).show();
Jay Patel
źródło
Zdefiniowane przez użytkownika opóźnienie tostowe 5000 milisekund.
Jay Patel,
Dobrze wyjaśnij, ale potrzebujesz kontekstu działania do tworzenia TOASTÓW, a nie kontekstu aplikacji.
Yousha Aleayoub,
Cóż, rzutowanie takie jak (ciąg) num nie zostało jeszcze wprowadzone w Javie. Wypróbuj Integer.toString () lub podobny.
Mostowski Zwiń
2
ustawienie czasu trwania toastu nie jest możliwe, tylko wstępnie zdefiniowane czasy, LENGTH_SHORT i LENGTH_LONG .
Jorgesys,
23

Toast w Androidzie

Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_SHORT).show();

lub

Toast.makeText(MainActivity.this, "YOUR MESSAGE", LENGTH_LONG).show();

(LENGTH_SHORT i LENGTH_LONG działają jak flagi boolowskie - co oznacza, że ​​nie można wysłać timera toastowego na milisekundy, ale musisz użyć jednej z tych 2 opcji)

Dinesh
źródło
6
Przeczytaj dokumentację, wybierzesz tylko Toast.LENGTH_SHORT lub Toast.LENGTH_LONG na czas trwania wiadomości.
Jorgesys,
20

Możesz dostosować swój tost:

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

Lub ogólny sposób:

Toast.makeText(context,"Your message.", Toast.LENGTH_LONG).show();
Mahesh
źródło
1
Właśnie - oto kilka przykładów z prawdziwych projektów na GitHubie
codota.com/android/methods/android.widget.Toast/show
15

Próbowałem kilku tostów, a dla tych, których toast daje im błąd, spróbuj

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

źródło
14

Można to zrobić na dwa sposoby.

Albo użyj wbudowanego komunikatu Toast

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

lub utwórz niestandardowy, podając niestandardowy plik układu

Toast myToast = new Toast(getApplicationContext());
myToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(myLayout);
myToast.show();
Aniket Thakur
źródło
1
Dobrze wyjaśnij, ale potrzebujesz kontekstu działania do tworzenia TOASTÓW, a nie kontekstu aplikacji.
Yousha Aleayoub,
Dokumenty Androida wspominają w szczególności o kontekście aplikacji: „Ta metoda przyjmuje trzy parametry: kontekst aplikacji, wiadomość tekstową i czas trwania toastu. Zwraca odpowiednio zainicjowany obiekt Toast”.
lgunsch
9

Natknąłem się na odpowiedzi tutaj i przyciągnął mnie fakt, że wydaje się, że ktoś się tu bawi, wierząc, że wymagany jest kontekst Aktywności. Nie o to chodzi. Konieczne jest jednak wysłanie Toast z głównego wydarzenia lub wątku interfejsu użytkownika. Tak więc uzyskanie tego poza kontekstem działania jest nieco trudne. Oto przykład, który działałby w ramach usługi systemowej lub dowolnej potencjalnej klasy, która ostatecznie dziedziczy 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();
            }
        });
    }
}

Pamiętaj, że nie potrzebujemy dostępu do instancji, Activityaby to działało. Przestań sugerować, że tak jest! Gdyby Activitybyły wymagane, sygnatura metody nie wymagałaby wywołania Context.

ChrisCM
źródło
8
Toast.makeText(app.getBaseContext(),"your string",Toast.LENGTH_SHORT).show();

zamiast używać „app.getBaseContext ()”.

Możesz spróbować użyć „ getApplicationContext () ” lub „ getContext () ”.

Jeśli Twój kod jest aktywny, powinieneś użyć „tego” z „Activty.this”.
Jeśli twój kod jest fragmentowy, powinieneś wybrać „getActivity ()”

Yogesh Nandha
źródło
7

Jeśli to fragment,

Toast.makeText(getActivity(), "this is my Toast message!!! =)",
                   Toast.LENGTH_LONG).show();
haszysz
źródło
6

Aby wyświetlić Toast, użyj następującego kodu:

Toast toast = new Toast(getApplicationContext());

toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);

toast.setDuration(Toast.LENGTH_LONG);

toast.show();
Anurag
źródło
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
źródło
5

Prosta droga

toast("Your Message")

LUB

toast(R.string.some_message)

Po prostu dodaj dwie metody do swojego BaseActivity. Lub utwórz nowy, BaseActivityjeśli jeszcze go nie używasz.

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

i rozszerz wszystkie swoje działania o BaseActivity.

public class MainActivity extends BaseActivity
Khemraj
źródło
3

Najprostszy sposób! (Aby wyświetlić w głównym działaniu, zastąp pierwszy argument innym działaniem)

Button.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        Toast.makeText(MainActivity.this,"Toast Message",Toast.LENGTH_SHORT).show();
    }
}
devDeejay
źródło
2

To działało dla mnie:

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

źródło
2

wprowadź opis zdjęcia tutaj

Musisz przeczytać: Android Toast Przykład

Składnia

Toast.makeText(context, text, duration);

Możesz użyć getApplicationContext () lub getActivity () lub MainActivity.this (jeśli Nazwa działania to MainActivity)

Toast.makeText(getApplicationContext(),"Hi I am toast",Toast.LENGTH_LONG).show();

lub

Toast.makeText(MainActivity.this,"Hi I am Toast", Toast.LENGTH_LONG).show();
Athira Reddy
źródło
2

Sposób rozpoczęcia

Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
Dary
źródło
1

Pokaż Toast from Service

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

Możesz także umieścić showToastmetodę w klasie Application i wyświetlać tosty z dowolnego miejsca.

Khemraj
źródło
1

Jeśli chcesz napisać prosty toast w swojej działalności: Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();

1.Pokazywanie TextView w Toast: ---

TextView tv = new TextView(this); tv.setText("Hello!"); tv.setTextSize(30); tv.setTextColor(Color.RED); tv.setBackgroundColor(Color.YELLOW);

2.Pokazywanie obrazu jako toast: -

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. wyświetlanie układu jako Toast: -

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

** Jeśli chcesz napisać toast w swoim Async, to: private Activity activity; private android.content.Context context; this.activity = activity; this.context = context; Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();

Deepya
źródło
1

Oto kolejny:

refreshBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(),getText(R.string.refresh_btn_pushed),Toast.LENGTH_LONG).show();
            }
        });

Gdzie Toastjest:

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

I strings.xml:

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

Jadeye
źródło
1

Fragmenty wewnętrzne (onCreateView)

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

Klasy wewnętrzne (onCreate)

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

MoniFern
źródło