Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 474
#1

Toast.makeText. Параметр context - Программирование Android

03.03.2018, 08:46. Просмотров 222. Ответов 9
Метки нет (Все метки)

Java
1
2
3
4
5
6
public static void MyFunction(Context context, int param1, int param2) {
//
//
//
Toast.makeText(context, "qwerty", Toast.LENGTH_LONG).show();
}
У меня служебная функция вызывает Toast.makeText() и эта функция вызывается из всех Activity.
Для вызова Toast в эту ф-ю каждый раз передаю ссылку на текущую Activity.
Можно ли обойтись без этого параметра и вызывать Toast со ссылкой на MainActivity?
Не будет ли каких-либо проблем?
http://www.cyberforum.ru/android-dev/thread1157058.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2018, 08:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Toast.makeText. Параметр context (Программирование Android):

Ошибка метода makeText в Toast (AIDE)
Здравствуйте. Редактирую код в AIDE на Android-смартфоне. Выскакивает вот такая...

Не выводит Toast
всем привет. есть код: Toast.makeText(c, "Start indexing...",...

Работа с Toast
Здавствуйте! Имеются две кнопки : mAnswerNo = (Button)...

Ошибка с Toast
public void makeToast(String text){ ...

Toast trouble
Все Доброго времени суток! Начал учить андроид по книге, там приводился код для...

9
Alex_Fedor
42 / 42 / 5
Регистрация: 20.01.2015
Сообщений: 279
03.03.2018, 21:22 #2
Вроде как любое активити потомок Context. Поэтому справедливо писать
Toast.makeText(Имя_активити.this, "qwerty", Toast.LENGTH_LONG).show(); Точно не помню, но вроде Toast в статических методах не работает.
0
ExFau$t
517 / 472 / 101
Регистрация: 08.05.2012
Сообщений: 2,377
03.03.2018, 22:02 #3
Зачем выносить куда-то строчку UI кода?
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 474
03.03.2018, 23:23  [ТС] #4
Цитата Сообщение от ExFau$t Посмотреть сообщение
Зачем выносить куда-то строчку UI кода?
Я кастомизировал Toast и использую его во всех активити.
0
ExFau$t
517 / 472 / 101
Регистрация: 08.05.2012
Сообщений: 2,377
03.03.2018, 23:33 #5
Ну и, аля билдер лежит в другом классе, контекст ему не нужен, а показываешь тост свой в активити.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 474
03.03.2018, 23:39  [ТС] #6
Цитата Сообщение от ExFau$t Посмотреть сообщение
Ну и, аля билдер лежит в другом классе, контекст ему не нужен, а показываешь тост свой в активити.
Не понял. Безопасно ли передавать в Toast контекст MainActivity, вызывая ф-ю из других активити?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
06.03.2018, 19:08 #7
Slon747, самый лучший выход - сделать BaseActivity, унаследовать от нее все активити и создать в ней protected метод с показом тоста. В качестве контекста в данном случае можно использовать this. Все активити смогут спокойно вызывать этот метод без всяких опасностей и т.п..
1
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 474
06.03.2018, 20:04  [ТС] #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
самый лучший выход - сделать BaseActivity, унаследовать от нее все активити и создать в ней protected метод с показом тоста. В качестве контекста в данном случае можно использовать this. Все активити смогут спокойно вызывать этот метод без всяких опасностей и т.п..
Спасибо.
Но ведь в моем случае MainActivity всегда существует. Чисто теоретически, возможна какая-либо проблема?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
06.03.2018, 20:06 #9
Цитата Сообщение от Slon747 Посмотреть сообщение
Но ведь в моем случае MainActivity всегда существует
Андроид не гарантирует ничего, особенно, что активити существует) Тем более вы хотите вызывать тост из других активити - MainActivity не на первом плане - может быть удалена.
1
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
06.03.2018, 20:39 #10
создаем класс наследник от Application (если он есть то добавляем туда только инициализацию)
Java
1
2
3
4
5
6
7
8
9
10
import android.app.Application;
 
public class MyApp extends Application {
 
    @Override
    public void onCreate() {
        super.onCreate();
        Show.init(this);
    }
}
прописываем этот класс в манифесте
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:name="MyApp"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
строка android:name="MyApp"

сам класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.widget.Toast;
 
import java.lang.ref.WeakReference;
 
public class Show {
 
    private final WeakReference<Context> ref;
    private static Show instance;
 
    private Show(Context context) {
        ref = new WeakReference<>(context);
    }
 
    public static void init(@NonNull Context context) {
        instance = new Show(context);
    }
 
    public static void shortToast(@StringRes int id) {
        if (instance == null || instance.ref.get() == null) return;
        Toast.makeText(instance.ref.get(), id, Toast.LENGTH_SHORT).show();
    }
 
    public static void longToast(@StringRes int id) {
        if (instance == null || instance.ref.get() == null) return;
        Toast.makeText(instance.ref.get(), id, Toast.LENGTH_LONG).show();
    }
 
    public static void shortToast(String text) {
        if (instance == null || instance.ref.get() == null) return;
        Toast.makeText(instance.ref.get(), text, Toast.LENGTH_SHORT).show();
    }
 
    public static void longToast(String text) {
        if (instance == null || instance.ref.get() == null) return;
        Toast.makeText(instance.ref.get(), text, Toast.LENGTH_LONG).show();
    }
}
и в любом месте в любом классе показываем тосты
Show.longToast("ололо азаза");
все

на Котлине класс Show вообще скомкивается до неприлично малого размера, но это другая история
2
06.03.2018, 20:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2018, 20:39
Привет! Вот еще темы с решениями:

Toast duration
Подскажите как задать свое время Добавлено через 1 минуту только вот мне...

Всплывающее сообщение (Toast)
Здравствуйте! Прочитал несколько раз 12 урок, но никак не смог реализовать. ...

Toast после AlertDialog.Builder
Добрый день. Нужно вывести Toast после нажатия setPositiveButton, в...

Как добавить OnClickListener в toast?
Хочу сделать так чтоб мои Toast сообщения реагировали на клик. Попробовал так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru