74

当用户单击片段内的按钮时,我正在尝试显示 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's 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显示。

4

14 回答 14

130

您没有调用您正在创建show()的.ToastmakeText()

于 2012-05-26T21:56:04.983 回答
67

正如 alfo888_ibg 所说:

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

做就是了:

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

这对我有用。

于 2013-07-17T14:26:16.843 回答
24

为了帮助其他人解决我同样的问题,在 Fragment 中使用 Toast 的完整答案是:

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show();
}
于 2013-01-18T17:54:02.620 回答
15

在片段中进行吐司时,请执行以下操作:

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

当类扩展片段时,有必要使用getActivity()因为片段是活动的子类

干杯

于 2015-09-02T11:18:05.340 回答
11

您可以使用 getActivity() 获取当前活动

Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();
于 2017-11-11T06:23:04.410 回答
8

在 Fragment 中烤面包

 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();
于 2016-06-21T05:48:21.377 回答
3

如果您使用的是 kotlin,那么上下文将已经在片段中定义。因此,只需使用该上下文。尝试以下代码以显示 toast 消息。

Toast.makeText(context , "your_text", Toast.LENGTH_SHORT).show()
于 2020-08-05T10:40:40.423 回答
2

在 android 片段中调用 Toast 时:

1. Activity mActivity=this.getActivity();  

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

这对我有用。

于 2016-05-24T06:13:45.510 回答
1

user2564789 说的对
但是你也可以this在其中使用getActivity()
它会让你的吐司看起来像这样


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

于 2015-02-03T16:52:35.480 回答
0

一个简单的 [Fragment] 子类。
科特林!
contextA - 是父(主)活动。将其设置在创建对象上。

class Start(contextA: Context) : Fragment() {

var contextB: Context = contextA;

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val fl = inflater.inflate(R.layout.fragment_start, container, false)

    // only thet variant is worked on me
    fl.button.setOnClickListener { view -> openPogodaUrl(view) }

    return fl;
}

fun openPogodaUrl(view: View) {        
    try {
        pogoda.webViewClient = object : WebViewClient() { // pogoda - is a WebView
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                view?.loadUrl(url)
                return true
            }
        }
        pogoda.loadUrl("http://exemple.com/app_vidgets/pogoda.html");
    }
    catch (e: Exception)
    {
        Toast.makeText(contextB, e.toString(), Toast.LENGTH_LONG).show();
    }
}

}

于 2020-02-11T21:22:16.960 回答
0

使用 Kotlin

Toast.makeText(view!!.context , "your_text", Toast.LENGTH_SHORT).show()
于 2020-03-23T22:27:12.773 回答
0

在 Kotlin android Toast.makeText(activity!!, "Your Text Here!", Toast.LENGTH_SHORT).show()

于 2021-06-17T18:57:34.563 回答
-1
        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();
        }
于 2016-06-21T01:00:08.887 回答
-1

独特的方法

(适用于 Dialog、Fragment、Even Util 类等...)

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

相应地在 Application 类中添加以下代码。

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();
}
}
于 2017-11-11T07:03:53.217 回答