#android
#Android
Вопрос:
У меня есть кнопка.Когда пользователь нажимает кнопку, возникает некоторое условие, которое не удовлетворяет, тогда необходимо отобразить всплывающее сообщение, но не показывать всплывающее сообщение…
Код: отредактирован
Button addMe = (Button)findViewById(R.id.addMe);
addMe.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(selectedReason.equals("--Select--")){
Log.i("TAG","-----");
Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
}else if(selectedType.equals("--Select--")){
Toast.makeText(getParent(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
}else{
if(selectedType.equals("Value")){
if(spc_amount.getText().toString().equals("")){
Log.i("TAG","-----");
Toast.makeText(getBaseContext(), "Discount type can not be blank", Toast.LENGTH_SHORT).show();
}else{
if(Double.parseDouble(spc_amount.getText().toString()) > invoiceValue){
Toast.makeText(getBaseContext(), "Amonut can not be grater than invoice", Toast.LENGTH_SHORT).show();
}else{
Discount dis = new Discount();
dis.setCriteriaName(selectedReason);
dis.setDiscountValue(Double.parseDouble(spc_amount.getText().toString()));
spDisList.put(1,dis);
tl.removeAllViews();
loadTableLayout();
}
}
}
}
}
});
Я пробовал контекст с getParent()
, getApplicationContext()
, SpecialDiscountActivity.this
amp; getBaseContext()
, но не работает….
Это Toast
сообщение, поступающее под Tab Activity Group
Комментарии:
1. Как указано в одном комментарии ниже, вы также должны включить «Показывать уведомления» для приложения, чтобы Toast работал на вас.
2. Почему вы отредактировали код, чтобы включить решение? Оно должно быть сохранено, чтобы содержать ошибку, иначе этот вопрос не имеет смысла.
3. Также распространенная ошибка: если вы не в основном потоке, вам нужно позвонить
runOnUiThread
. Например.runOnUiThread(() -> Toast.makeText(getApplicationContext(), " ...", Toast.LENGTH_LONG).show());
Ответ №1:
Попробуйте:
Toast.makeText(getBaseContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
Это .show(), который вы везде пропустили, который приводит к тому, что все ваши тосты устанавливаются, но никогда не выполняются.
Комментарии:
1. О боже, почему. Из-за этого застрял на пару часов!
2. Это. Это. Глупо.
3. У меня такое чувство, что я собираюсь сделать эту ошибку довольно много раз. Если вы используете jQuery, это похоже на их метод для
.show()
и.hide()
элементов DOM, поэтому, если вы помните, что по умолчанию Toast всегда скрыт, это может помочь не забыть выполнить.show()
4. У меня есть .show(), и я вызываю прямо из метода onCreate действия, и у меня также есть use
this
,MainActivity.this
getApplication()
getApplicationContext()
,getBaseContext()
, и все это безрезультатно. Всплывающее сообщение появилось в первых двух тестах и больше никогда не показывалось. За этот период код не изменился.5. @RichardMcFriendOluwamuyiwa Тем не менее, всегда есть небольшая деталь, которую вы пропустили, я знаю из первых рук..
Ответ №2:
Пожалуйста, извините меня, если это не решение вашей проблемы, но я случайно снял флажок «Показывать уведомления» в приложении один раз. Возможно, стоит зайти в настройки вашего устройства / приложение / менеджер и проверить этот параметр.
Комментарии:
1. Я бы никогда не подумал об этом… Думал, что этот параметр скрывает только значок уведомления моей службы, но вы правы, он также скрывал тосты
2. Вау, я был крайне скептически настроен по этому поводу, но, по крайней мере, в 4.4.4 отключение уведомлений также останавливает отображение тостов.
3. Я тоже это сделал и потратил впустую 30 минут своего времени:(
Ответ №3:
Я думаю, вам не хватает .show();
этого должно быть…
Toast.makeText(getBaseContext(), "Amount can not be grater than invoice",
Toast.LENGTH_SHORT).show();
Комментарии:
1. Спасибо @LalitPoptani, я сделал это с помощью Toast.makeText(SalesActivityGroup.group.getParent(), «Сумма не может быть больше, чем счет-фактура», Toast. LENGTH_SHORT).show();
2. @NagkeeranPiraba еще одна вещь в вашем вопросе заключается в том, что вы должны были упомянуть, что используете Tab.
3. Я не могу поверить, что это тоже была моя ошибка! ха-ха. Большое спасибо за предупреждение!
Ответ №4:
Просто перезагрузите свое устройство! Это решило мою проблему.
Комментарии:
1. Боже да, для всех, кто читает этот ответ, он означает «перезагрузите свое устройство». Я почти отклонил ваш ответ … xP
2. Чувак, ты только что спас мне целый день! Я показывал всплывающее сообщение типа
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
, и оно не появлялось внезапно. Заставило меня усомниться в своих способностях и смысле жизни… Перезагрузка устройства исправила это!3. Вау. Работает в 2020 году. Сборка устройства Pixel 2 QQ1A.191205.008). Отлично!
4. Это сработало для меня на моем эмулируемом AVD Pixel 3a. Я перепробовал все остальное. Спасибо!
5. У меня сработало на MiA2. Хорошая работа, я нашел это. Я как раз собирался начать изменять код, который работал!
Ответ №5:
Может быть, вы не в потоке пользовательского интерфейса? Попробуйте это:http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang .Работоспособность)
Комментарии:
1. Отсутствие вызова в потоке пользовательского интерфейса сбивает меня с толку чаще, чем я готов признать.
Ответ №6:
Если всплывающее сообщение не отображается, это означает, что либо вы не вызывали show()
метод, либо вы не находитесь в потоке пользовательского интерфейса
В идеале вы должны создать вспомогательный метод для отображения всплывающего сообщения, подобного этому, в потоке пользовательского интерфейса
/** Execute Toast on UI thread **/
private fun showToast(message: String) {
Handler(Looper.getMainLooper()).post {
// Code here will run in UI thread
Toast.makeText(
this,
message,
Toast.LENGTH_LONG
).show()
}
}
Комментарии:
1. Вызов конструктора empty Handler из основного потока создаст обработчик, который не отправляется в основной поток. Вам нужно указать основной цикл.
Ответ №7:
Мне понравилось это
Toast.makeText(SalesActivityGroup.group.getParent(), "Amount can not be
grater than invoice", Toast.LENGTH_SHORT).show();
Ответ №8:
Просто наткнулся на эту проблему и задавался вопросом, как простой тост не появляется. После нескольких попыток мне пришло в голову проверить настройки уведомлений приложения и вуаля.
Я включил настройку уведомлений, и оно начало отображаться. Я искал и наткнулся на ссылку ниже, в которой говорится о том же:
Комментарии:
1. Это случилось и со мной на Android 9, это решило проблему. Спасибо!
Ответ №9:
Могут быть две возможности:
1 — Вы не добавили .show();
в самом конце Toast.makeText(getActivity(), "Hi", Toast.LENGTH_SHORT)
.
2 — Может возникнуть ситуация, когда вы не передаете правильный контекст
Для этого попробуйте передать getActivity().getApplicationContext();
что в моем случае решило проблему.
Удачи 🙂
Ответ №10:
Просто перезапустите свой эмулятор, это не устранило мою проблему.
- Закройте эмулятор
- Инструменты -> Avd Manager
- В списке устройств нажмите на «значок выпадающего списка» в столбце «Действие».
- Теперь холодная загрузка
Теперь переустановите приложение, оно будет работать.
Ответ №11:
Иногда эмулятор зависает, поэтому перезапуск эмулятора устраняет проблему.
Ответ №12:
Вы можете использовать контекст действия
Нравится,
Toast.makeText(ActivityName.this,"Reason can not be blank", Toast.LENGTH_SHORT).show()
если это не работает, пожалуйста, поставьте log.i();
в каждое ваше условие, возможно, оно будет последним, и вы не получите тост.
Ответ №13:
В моем случае это было потому, что я не запускался из основного потока, это исправило это:
val mainActivity = (tabHostActivity.activityContext() as MainActivity)
mainActivity.lifecycleScope.launch{ //Dispatchers.Main, follows lifecycle
Toast.makeText(mainActivity, "my awesome message", Toast.LENGTH_LONG).show()
}
Ответ №14:
Просто холодная загрузка вашего устройства! Это может решить проблему.
Ответ №15:
Иногда в сообщении, которое мы хотим распечатать с всплывающим сообщением, может быть ошибка или исключение NullPointerException. Если произошла эта ошибка, приложение просто проигнорирует всплывающее сообщение. У меня была такая же проблема. Я напечатал сообщение в журнале и обнаружил ошибку, после этого я изменил сообщение в тосте. И это сработало так, как я хотел. Попробуйте!!
Ответ №16:
Android регулирует запросы, поэтому, если вы отправляете многим, они просто перестают отображаться, вместо этого вы можете использовать Snackbar:
Snackbar.make(myView, "This is a snack.", Snackbar.LENGTH_SHORT).show();
Ответ №17:
Попробуйте:
Toast.makeText(v.getContext(), "Reason can not be blank", Toast.LENGTH_SHORT).show();
Ответ №18:
Комплимент проверяет весь код, и если есть критическая ошибка, он игнорирует даже строки перед разделом ошибок, и поэтому вы не увидите «Всплывающее сообщение». Просто прокомментируйте строки, в которых возникает ошибка (вы можете найти строки ошибок в Logcat) Теперь вы можете увидеть «Всплывающее сообщение» и проанализировать свою проблему.