在片段内使用烤面包片

当用户点击Fragment中的button时,我试图显示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() , ... 

在debugging中我可以看到,所有这些代码运行没有任何例外,但没有显示TOAST

你没有在你用makeText()创build的Toast上调用show() 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(); 

这对我工作。

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

 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

在片段里面做吐司

  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(); 

当在android片段中调用Toast时:

 1. Activity mActivity=this.getActivity(); 2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show(); 

这对我有用。

user2564789说得对
但是你也可以使用getActivity()
这将使你的敬酒看起来像这样

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

嗨,我已经看到一些用户已经被回答的问题。 我仍然认为这个信息对于android程序员是有用的。

切勿在您的api响应中使用getActivity()getContext() 。 因为在api响应来临之前,如果你的片段被replace了,它可能是null

并出现错误

java.lang.IllegalStateException: Fragment MyFragment{410f6060} not attached to Activity

而是使用Application类来显示吐司。 喜欢

 public class ApplicationContext extends Application { /** Instance of the current application. */ private static ApplicationContext instance; /** * Constructor. */ public ApplicationContext() { instance = this; } /** * Gets the application context. * * @return the application context */ public static Context getContext() { if (instance == null) { instance = new ApplicationContext(); } return instance; } /** * display toast message * * @param data */ public static void showToast(String data) { Toast.makeText(getContext(), data, Toast.LENGTH_SHORT).show(); } } 

如果你需要在片段中使用Activity instance ,那么你可以创build一个base class ,并用你的所有片段扩展它。

 public class BaseProjectFragment extends Fragment private BaseProject baseProject; public BaseProject getBaseProject() { if (baseProject == null) baseProject = (BaseProject) getBaseProject(); return baseProject; } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof BaseProject) { baseProject = (BaseProject) context; } } 

并使用getBaseProject()而不是getActivity() 。 因为它永远不会给你null

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

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

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