Як відобразити Toast в Android?


446

У мене є повзунок, який можна витягнути вгору, а потім він показує карту. Я можу переміщувати повзунок вгору та вниз, щоб сховати або показати карту. Коли карта знаходиться спереду, я можу обробляти події на дотику на цій карті. Щоразу, коли я торкаюсь, A AsyncTaskзапускається, він завантажує деякі дані та робить Toastте, що відображає дані. Хоча я починаю завдання на сенсорній події, тост не відображається, поки я не закрию повзунок. Якщо повзунок закритий і карта більше не відображається, Toastз'являється.

Будь-які ідеї?

Добре починайте завдання

Редагувати:

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

і в onPostExecuteтості

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

По-новому TestTask(this), це посилання на, MapOverlayа не на це MapActivity, тому в цьому і була проблема.


1
на цю посаду було дано відповідь, але я думаю, що мій коментар ще може комусь допомогти. є добре сформована бібліотека Toast, перевірте її: stackoverflow.com/a/18280318/1891118
Олексій К.

2
Майже все про Тост ... простий підручник .... натисніть тут
Томас Даніель

Відповіді:


849

Щоб відобразити Toast у вашій програмі, спробуйте це:

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

Ще один приклад:

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

Ми можемо визначити дві константи за тривалістю:

int LENGTH_LONG Показувати перегляд або текстове повідомлення протягом тривалого періоду часу.

int LENGTH_SHORT Показати перегляд або текстове повідомлення на короткий проміжок часу.

Настроювання тостів

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

3
@Elen, для створення TOASTS вам потрібен контекст діяльності, а не контекст програми.
Yousha Aleayoub

1
Насправді, вимагати контексту діяльності не є коректним. ЗАРАЗ, тости для роботи поза діяльністю (наприклад, у системній службі) вимагають доступу до основного циклу. Опублікував моє рішення.
ChrisCM

7
Якщо ви розміщуєте його всередині методу onClick, замість getActivity () на getBaseContext () працював для мене.
Едвард

@ PhilipBelgrave-Herbert На жаль, ваше посилання вже не є хорошим.
Еллен Спертус

4
Toast.makeText (MainActivity.this, повідомлення, Toast.LENGTH_LONG) .show ();
Шахаб Ейнабаді

83

Розширення активності за допомогою baseadapterвикористовуваного цього

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

або якщо ви використовуєте діяльність або mainactivity

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

1
не існує такого поняття, як базовий адаптер або основна діяльність, тост відображається лише шляхом передачі параметрів контексту програми, повідомлення, тривалості / короткості
Mahesh

47

Синтаксис

Toast.makeText(context, text, duration);

Значення параметра

контекст

getApplicationContext() - Повертає контекст для всіх дій, що виконуються в додатку.

getBaseContext() - Якщо ви хочете отримати доступ до Context з іншого контексту в програмі, ви можете отримати доступ.

getContext() - Повертає контекстний вигляд лише поточної запущеної діяльності.

текст

text - Повернення "STRING", якщо не рядок, ви можете використовувати тип cast.

 (string)num   // type caste

тривалість

Toast.LENGTH_SHORT - Заздалегідь визначена затримка тостів 2000 мс

Toast.LENGTH_LONG - Заздалегідь визначена затримка тостів 3500 мс

milisecond - затримка тоста, визначена користувачем мілісекундами (наприклад, 4000)


Приклад.1

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

Приклад.2

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

Зазначена користувачем затримка тостів 5000 мілісекунд.
Джей Патель

Добре поясніть, але для створення TOASTS вам потрібен контекст діяльності, а не контекст програми.
Yousha Aleayoub

Що ж, добре, асист, такий як (string) num, ще не введений в Java. Спробуйте Integer.toString () або подібне.
Mostowski Згорнутись

2
не можна встановити тривалість тосту, лише заздалегідь задані часи, LENGTH_SHORT & LENGTH_LONG .
Хорхесіс

23

Тости в Android

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

або

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

(LENGTH_SHORT і LENGTH_LONG діють як булеві прапори - це означає, що ви не можете надіслати таймер тостів до мілісекунд, але вам потрібно скористатися будь-яким із цих двох варіантів)


6
Прочитавши документацію, ви виберете лише Toast.LENGTH_SHORT або Toast.LENGTH_LONG протягом тривалості повідомлення.
Хорхесіс

20

Ви можете налаштувати тост:

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

Або загальним способом:

Toast.makeText(context,"Your message.", Toast.LENGTH_LONG).show();

1
Правильно - ось кілька прикладів із реальних проектів на GitHub - codota.com/android/methods/android.widget.Toast/show
drorw

15

Я спробував кілька тостів, і для тих, кого їх тост дає їм помилку, спробуйте

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

14

Є два способи зробити це.

Або використовуйте вбудоване повідомлення 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();

або зробити спеціальний, надавши файл власної компонування

Toast myToast = new Toast(getApplicationContext());
myToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
myToast.setDuration(Toast.LENGTH_LONG);
myToast.setView(myLayout);
myToast.show();

1
Добре поясніть, але для створення TOASTS вам потрібен контекст діяльності, а не контекст програми.
Yousha Aleayoub

Документи андроїда конкретно згадують контекст програми: "Цей метод містить три параметри: контекст програми, текстове повідомлення та тривалість тосту. Він повертає належним чином ініціалізований об'єкт Toast".
lgunsch

9

Я натрапив на відповіді тут, і мене привернуло те, що, здається, хтось обзивається, вважаючи, що потрібен контекст діяльності. Це не так. Однак це вимога, щоб "Тост" розміщувався з головної події або з потоку інтерфейсу користувача. Отже, домогтися цього до роботи поза контекстом діяльності є дещо складним. Ось приклад, який би працював всередині системної служби або будь-якого потенційного класу, який в кінцевому рахунку успадковує 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();
            }
        });
    }
}

Зауважте, що для цього нам не потрібен доступ до екземпляра Activity. Будь ласка, перестаньте припускати, що це так! Якщо Activityпотрібно, підпис методу не вимагатиме а Context.


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

замість використання "app.getBaseContext ()".

Ви можете спробувати використати " getApplicationContext () " або " getContext () ".

Якщо ваш код у активності, ви повинні використовувати "this" "Activty.this".
Якщо ваш код у фрагменті, вам слід перейти до "getActivity ()"


7

Якщо це фрагмент,

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

6

Для відображення тосту використовуйте наступний код:

Toast toast = new Toast(getApplicationContext());

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

toast.setDuration(Toast.LENGTH_LONG);

toast.show();

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**

5

Простий шлях

toast("Your Message")

АБО

toast(R.string.some_message)

Просто додайте у свій спосіб два способи BaseActivity. Або створити нове, BaseActivityякщо ви вже не використовуєте.

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

і розширити всю свою діяльність на BaseActivity.

public class MainActivity extends BaseActivity

3

Найпростіший спосіб! (Щоб відобразити основну діяльність, замініть Перший аргумент на іншу діяльність)

Button.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        Toast.makeText(MainActivity.this,"Toast Message",Toast.LENGTH_SHORT).show();
    }
}

2

Це працювало для мене:

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

2

введіть тут опис зображення

Потрібно прочитати: Приклад Android Toast

Синтаксис

Toast.makeText(context, text, duration);

Ви можете використовувати getApplicationContext () або getActivity () або MainActivity.this (якщо назва діяльності - MainActivity)

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

або

Toast.makeText(MainActivity.this,"Hi I am Toast", Toast.LENGTH_LONG).show();

2

Початок роботи

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

1

Показати тост від служби

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

Ви також можете помістити showToastметод у свій клас Application та показати тости з будь-якого місця.


1

Якщо ви хочете написати простий тост у своїй діяльності: Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();

1.Показ TextView в тості: ---

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

2.Показ зображення як тост: -

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.показ макета як тосту: -

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

** Якщо ви хочете записати тост у свою програму Async: private Activity activity; private android.content.Context context; this.activity = activity; this.context = context; Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show();


1

Ось ще одна:

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

Де Toast:

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

& strings.xml:

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


1

Всередині фрагменти (onCreateView)

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

Внутрішні класи (onCreate)

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.