Подтвердить что ты не робот

Использовать Toast внутри фрагмента

Я пытаюсь показать сообщение Toast, когда пользователь нажимает на кнопку внутри фрагмента. Проблема в том, что я не могу получить доступ к активности, чтобы показать Toast на ней.

Здесь источник Fragment:

    public class FrgTimes extends Fragment
    {
        ScrollView sv;
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) 
        {
            if (container == null) { return null; }

            sv = (ScrollView)inflater.inflate(R.layout.frg_times, container, false);

            btnTime1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

            //******  HERE the PROBLEM  ********
            Toast.makeText(<The Activity>, "Please long press the key", Toast.LENGTH_LONG );

            }});

            return sv;
        }

И вот что я пробовал.

Toast.makeText( getActivity()  , ...
Toast.makeText( getView().getContext()  , ...
Toast.makeText( getActivity().getApplicationContext()  , ...
Toast.makeText( sv.getContext()  , ...
Toast.makeText( sv.getRootView().getContext()  , ...

В Debug я вижу, что все эти коды запускаются без каких-либо исключений, но не отображаются TOAST.

4b9b3361

Ответ 1

Вы не вызываете show() в Toast, который вы создаете с помощью makeText().

Ответ 2

Как указано alfo888_ibg:

@Override
public void onClick(View arg0) {
   Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}

Просто выполните:

    Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();

это сработало для меня.

Ответ 3

Чтобы помочь другим людям с моей же проблемой, полный ответ "Использовать тост внутри фрагмента":

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}

Ответ 4

При создании тоста в фрагменте сделайте следующее:

Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();

Когда класс расширяет фрагмент, необходимо использовать getActivity(), поскольку фрагмент является подклассом активности.

Cheerse

Ответ 5

Вы можете получить текущую активность с помощью getActivity()

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

Ответ 6

Создание тоста внутри фрагмента

 Toast.makeText(getActivity(), "Your Text Here!", Toast.LENGTH_SHORT).show();

ИЛИ

    Activity activityObj = this.getActivity();

    Toast.makeText(activityObj, "Your Text Here!", Toast.LENGTH_SHORT).show();

ИЛИ

Toast.makeText(this, "Your Text Here!", Toast.LENGTH_SHORT).show();

Ответ 7

user2564789 сказал, что это правильно
Но вы также можете использовать this вместо getActivity()
которые сделают ваш тост похожим на это   


     Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();
    

Ответ 8

При вызове Toast внутри фрагмента android:

1. Activity mActivity=this.getActivity();  

2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show();

Это работает для меня.

Ответ 9

Уникальный подход

(Будет работать для диалога, фрагмента, даже класса Util и т.д.)

ApplicationContext.getInstance().toast("I am toast");

Добавьте соответственно код в класс приложения.

public class ApplicationContext extends Application {

private static ApplicationContext instance;

@Override
public void onCreate() {
    super.onCreate();
    instance = this;
}

public static void toast(String message) {
    Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show();
}
}

Ответ 10

        public void onClick(View v) {
            Context context = v.getContext();
            CharSequence text = "Message";
            int duration = Toast.LENGTH_SHORT;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
        }