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ます。今のところ、トーストメッセージを作成して、どのボタンが押されたかを確認したいと思います。ただし、thisコンテキストとして使用すると、次のエラーメッセージが表示されます 。Toast型のメソッドmakeText(Context、CharSequence、int)は、引数(FragmentSocial、String、int) に適用できません。、onCreateメソッド内に作成してインスタンス化しようとしましたが、何も機能しませんでした。エラーメッセージが表示されなかったが、トーストが表示されなかったか、その他のエラーが発生しました。thisFragmentSocial.thisFragmentSocial.this.getActivity()private Context mContextmContext = (I tried various options here)

では、どうすればここでトーストを作成できますか?

ありがとうございました!

4

5 に答える 5

13

使用する:

getActivity().getBaseContext();
于 2013-03-12T14:43:17.107 に答える
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 に答える