我有以下片段:
public class FragmentSocial extends Fragment implements ActionBar.TabListener, OnClickListener
{
private Fragment mFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setContentView(R.layout.fragment_social);
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// relevant code...
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// relevant code...
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
public void onClick(View v) {
switch(v.getId())
{
case R.id.imgBtnFB:
Toast.makeText(this, "FB pressed", Toast.LENGTH_LONG).show();
break;
case R.id.imgBtnTwitter:
Toast.makeText(this, "Twitter pressed", Toast.LENGTH_LONG).show();
break;
}
}
我的fragment_social
布局中有几个图像按钮。现在我只想制作Toast消息,看看按下了什么按钮。但是,如果我使用this
作为上下文,我收到此错误消息:
Toast类型中的方法makeText(Context,CharSequence,int)不适用于参数(FragmentSocial,String,int)
我尝试将this
更改为FragmentSocial.this
,更改为FragmentSocial.this.getActivity()
,尝试创建private Context mContext
并在onCreate方法中将其实例化为mContext = (I tried various options here)
- 但没有任何效果。我要么没有错误信息,也没有看到Toast,或者有其他错误。
那么如何在这里创建Toast?
谢谢!
答案 0 :(得分:12)
使用:
getActivity().getBaseContext();
答案 1 :(得分:3)
如果您正在使用片段,请使用此代码
Toast.makeText(getActivity(), "You have insufficient points", Toast.LENGTH_LONG ).show();
答案 2 :(得分:2)
以下任何一行均有效。
Toast.makeText(getActivity(), "hello",Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(),"Hello",Toast.LENGTH_LONG).show();
答案 3 :(得分:0)
扩展Marcin S.的答案,你也可以在Fragment中设置构造函数并传入一个上下文变量。然后,您可以随时使用此上下文来引用活动。此方法也比getActivity().getBaseContext()
将其添加到FragmentSocial类:
Context context;
public FragmentSocial(Context context) {
this.context = context;
}
当您在主要活动课程中说FragmentSocial fragmentSocial = new FragmentSocial();
时,请将参数this
添加到()
中,使其看起来像FragmentSocial fragmentSocial = new FragmentSocial(this);
答案 4 :(得分:0)
这是我在片段
中的方式//修改
YourActivity activity;
@Override
public void onAttach(Activity activity) {
this.activity = (YourActivity) activity;
}
@Override
public void onClick(View v) {
Toast.makeText(this.activity, "message", Toast.LENGTH_LONG).show();
}