Ответ 1
Вы не вызываете show()
в Toast
, который вы создаете с помощью makeText()
.
Я пытаюсь показать сообщение 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
.
Вы не вызываете show()
в Toast
, который вы создаете с помощью makeText()
.
Как указано alfo888_ibg:
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
Просто выполните:
Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();
это сработало для меня.
Чтобы помочь другим людям с моей же проблемой, полный ответ "Использовать тост внутри фрагмента":
Activity activity = getActivity();
@Override
public void onClick(View arg0) {
Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
При создании тоста в фрагменте сделайте следующее:
Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();
Когда класс расширяет фрагмент, необходимо использовать getActivity(), поскольку фрагмент является подклассом активности.
Cheerse
Вы можете получить текущую активность с помощью getActivity()
Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();
Создание тоста внутри фрагмента
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();
user2564789 сказал, что это правильно
Но вы также можете использовать this
вместо getActivity()
которые сделают ваш тост похожим на это
Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show();
При вызове Toast внутри фрагмента android:
1. Activity mActivity=this.getActivity();
2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show();
Это работает для меня.
(Будет работать для диалога, фрагмента, даже класса 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();
}
}
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();
}