Как отобразить тост в Android?


446

У меня есть слайдер, который можно подтянуть, а затем он показывает карту. Я могу перемещать ползунок вверх и вниз, чтобы скрыть или показать карту. Когда карта находится впереди, я могу обрабатывать сенсорные события на этой карте. Каждый раз, когда я касаюсь, 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
Почти все о Тосте ... простое учебное пособие .... нажмите здесь
Thomas Daniel

Ответы:


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
@ Елена, вам нужен контекст действия для создания TOASTS, а не контекст приложения.
Юша Алеауб

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() - Если вы хотите получить доступ к контексту из другого контекста в приложении, вы можете получить доступ.

getContext() - Возвращает контекстное представление только текущей текущей активности.

текст

text - Вернуть «STRING», если не строка, вы можете использовать тип cast.

 (string)num   // type caste

продолжительность

Toast.LENGTH_SHORT - Задержка тоста 2000 мс предопределена

Toast.LENGTH_LONG - Задержка тоста 3500 мс предопределена

milisecond - Задержка тоста определяется пользователем в миллисекундах (например, 4000)


Example.1

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

Example.2

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

Определяемая пользователем задержка тоста 5000 миллисекунд.
Джей Патель

Хорошо объясните, но вам нужен контекст Activity для создания TOASTS, а не Application context.
Юша Алеауб

Ну, хорошо, приведение типа (string) num еще не было введено в Java. Попробуйте Integer.toString () или аналогичный.
Мостовский Свернуть

2
установка длительности для тоста невозможна, только в предопределенное время, LENGTH_SHORT & LENGTH_LONG .
Jorgesys

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 для продолжительности сообщения.
Jorgesys

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
Хорошо объясните, но вам нужен контекст Activity для создания TOASTS, а не Application context.
Юша Алеауб

Документы Android специально упоминают контекст приложения: «Этот метод принимает три параметра: контекст приложения, текстовое сообщение и длительность тоста. Он возвращает правильно инициализированный объект тоста».
lgunsch

9

Я наткнулся на ответы здесь, и меня привлек тот факт, что, кажется, кто-то возится, полагая, что контекст действия необходим. Это не вариант. Тем не менее, это требование, чтобы Toast был опубликован из основного события или потока пользовательского интерфейса. Таким образом, заставить это работать вне контекста деятельности немного сложно. Вот пример, который будет работать внутри системной службы или любого потенциального класса, который в конечном итоге наследуется от 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();


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.