在Fragment中的onClick方法中吐司

时间:2013-03-12 14:42:30

标签: android onclick android-fragments toast

我有以下片段:

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?

谢谢!

5 个答案:

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