4

我有以下片段:

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) 不适用于 我尝试更改this为的参数 (FragmentSocial, String FragmentSocial.this, int) FragmentSocial.this.getActivity(),尝试创建private Context mContext并将其实例化到mContext = (I tried various options here)onCreate 方法内部 - 但没有任何效果。我要么没有错误消息,但也没有看到 Toast,或者有其他错误。

那么我怎样才能在这里创建一个 Toast 呢?

谢谢!

4

5 回答 5

13

采用:

getActivity().getBaseContext();
于 2013-03-12T14:43:17.107 回答
3

如果您使用的是片段,请使用此代码

Toast.makeText(getActivity(), "You have insufficient points", Toast.LENGTH_LONG ).show();
于 2017-03-02T05:44:24.973 回答
2

以下任一行都有效。

Toast.makeText(getActivity(), "hello",Toast.LENGTH_LONG).show();
Toast.makeText(getActivity().getApplicationContext(),"Hello",Toast.LENGTH_LONG).show();
于 2013-07-23T22:31:33.827 回答
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);

于 2013-03-12T14:45:16.400 回答
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();
}
于 2013-03-12T14:52:11.787 回答