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

Toast.makeText. Параметр context

03.03.2018, 08:46. Просмотров 322. Ответов 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?
Не будет ли каких-либо проблем?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2018, 08:46
Ответы с готовыми решениями:

Метод makeText в Toast - ошибка
Здравствуйте, помогите плз, новичку. В строке 81 - Toast.makeText(this,...

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

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

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

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

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
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,706
03.03.2018, 22:02 3
Зачем выносить куда-то строчку UI кода?
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
03.03.2018, 23:23  [ТС] 4
Цитата Сообщение от ExFau$t Посмотреть сообщение
Зачем выносить куда-то строчку UI кода?
Я кастомизировал Toast и использую его во всех активити.
0
ExFau$t
638 / 538 / 122
Регистрация: 08.05.2012
Сообщений: 2,706
03.03.2018, 23:33 5
Ну и, аля билдер лежит в другом классе, контекст ему не нужен, а показываешь тост свой в активити.
0
Slon747
59 / 37 / 2
Регистрация: 24.08.2013
Сообщений: 522
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
Сообщений: 522
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
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,719
Завершенные тесты: 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 trouble
Все Доброго времени суток! Начал учить андроид по книге, там приводился код для...

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

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


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

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

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