在片段中使用吐司

时间:2012-05-26 21:51:36

标签: android android-fragments android-activity 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'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

14 个答案:

答案 0 :(得分:103)

您没有使用show()Toast上致电makeText()

答案 1 :(得分:48)

如alfo888_ibg所述:

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

只是做:

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

这对我有用。

答案 2 :(得分:20)

为了帮助另一个遇到同样问题的人, 在Fragment中使用Toast的完整答案是:

Activity activity = getActivity();

@Override
public void onClick(View arg0) {

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

答案 3 :(得分:12)

在片段中敬酒时,请执行以下操作:

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

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

Cheerse

答案 4 :(得分:7)

您可以使用getActivity()

获取当前活动
Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show();

答案 5 :(得分:6)

在片段中制作祝酒词

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

OR

    Activity activityObj = this.getActivity();

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

OR

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

答案 6 :(得分:1)

user2564789说得对了 但您也可以在this的位置使用getActivity() 这将使你的吐司看起来像这样     


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

答案 7 :(得分:1)

在android片段中调用Toast时:

1. Activity mActivity=this.getActivity();  

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

这适合我。

答案 8 :(得分:0)

独特方法

(适用于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();
}
}

答案 9 :(得分: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();
    }
}

}

答案 10 :(得分:0)

使用Kotlin

Toast.makeText(view!!.context , "your_text", Toast.LENGTH_SHORT).show()

答案 11 :(得分:0)

如果您正在使用kotlin,则上下文将在片段中已定义。因此,只需使用该上下文即可。尝试使用以下代码显示敬酒消息。

Toast.makeText(context , "your_text", Toast.LENGTH_SHORT).show()

答案 12 :(得分:0)

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

答案 13 :(得分:-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();
        }