2012-12-26 173 views
0

我想在用户单击活动的片段中的按钮时弹出上下文帮助。我曾尝试使用Toast执行此操作,但徒劳无功。弹出的对话框不显示(请注意Use Toast inside Fragment中的建议没有帮助)。Toast in a fragment does not show

我在片段类代码被写在下面:

  final Button help = (Button) view.findViewById(R.id.help_button); 
     del.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      Context context = (TabsActivity) getActivity().getApplicationContext(); 
      CharSequence text = "Hello toast!"; 
      int duration = Toast.LENGTH_LONG; 
      Toast toast = Toast.makeText(view.getContext(), text, duration); 
      toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
      toast.show(); 
      } 
     }); 

我曾尝试的CONTEXT若干变化,其中的两个在代码被示出。 我也试过getActivity(),getView().getContext(),getContext()所有这些都是徒劳的。你能帮助理解如何在一个片段中设置CONTEXT吗?

 final Button help = (Button) view.findViewById(R.id.help_button); 
     del.setOnClickListener(new View.OnClickListener(){ 

不应该是阅读(注意,现在的帮助是获得这个的onclick听众):

 final Button help = (Button) view.findViewById(R.id.help_button); 
     help.setOnClickListener(new View.OnClickListener(){ 
+0

您的上下文(荷兰国际集团)是有点好。继续使用'view.getContext()',除了写'v.getContext()'!我见过的大多数代码完全忘记了从视图参数中获取上下文。 – petey

回答

1
在你的代码

 Context context = getActivity().getApplicationContext(); 
     Toast.makeText(context, "Hello toast!", Toast.LENGTH_LONG).show(); 

保持简单并从那里开始工作,因此您可以确定哪个位实际上会导致您的错误。

认沽登录到您的代码,那么你可以决定当你的听众的onClick实际使用,而不是依赖吐司

setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
      Log.d("MyTag", "Button 1 was pressed"); 
    } 
} 
+0

与var名称 – Blundell

+0

的好处也使用'v.getContext()'在setonclicklistener参数中传递。 – petey

+0

非常感谢您指出。拍摄呀!我不能相信我错过了,花了两个小时弄清楚了!这是复制粘贴的恶魔。 – user1124702

5

再次使用你的应用环境,而不是让它从视图

4

使用简单getActivity()没有其他的东西。不需要投射或者获取应用程序上下文。

我用Toast.makeText(getActivity(), "Simple Toast",1000).show();

,它为我工作。

0

试试这个,

Toast toast = Toast.makeText(getActivity().getApplicationContext(), "text", 100); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.show();