10

FragmentにはListViewがあります。アダプタでは、ダイアログを作成したいと思います。アダプターのアクティビティー・コンテキストをフラグメントから取得する

class ViewHolder { 
... 
    @Override 
    public void onClick(View v) { 
    ... 
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
    ... 
    } 
... 
} 

mContextアダプタが作成されたとき、私はグローバル保存され、私のFragmentからContextです。 エラーが発生します。

unable to add window -- token null is not for an application

方法getActivity()は私ActivityContextを取得するので、どのように利用できないのですか?

+3

より多くのコードを投稿してください。 – Blackbelt

+0

'View.getContext()'? ...とにかく: '私はアダプタが作成されたときにグローバルに保存する'あなたはコンテキスト(アプリケーションではない)をどこかにグローバル(FSM保存)として保存しますか? – Selvin

+0

私のアダプタのグローバル変数にコンテキストを保存します.fsmは私を保存しますか? – AdrianoCelentano

答えて

14

アダプターを作成するときに、何をコンテキストとして渡していますか?あなたがそれをやっていない場合thisを渡すようにしてください。いくつかのコードが役に立つかもしれません。

+0

ああ私はこの部分をコードしていなかった、フォールトはフラグメントから得たもので、アクティビティのコンテキストではなく、このことを期待していなかった。 – AdrianoCelentano

25

カスタムアダプターがある場合は、コンストラクターをパラメータとしてContextに変更してください。

次に、コンストラクタを介してコンテキストを格納するインスタンス変数を作成します。

private Context mContext; //instance variable 

public CustomAdapter(Context context, List<Item> items) { 
    //some code 
    this.mContext= context; 
} 

これで、アダプタ内の任意の場所から変数mContextを使用できるようになりました。

アダプターを作成するには、アクティビティーから作成された場合は 'this'を、フラグメントから作成する場合はgetActivity()を渡します。

mAdapter = new CustomAdapter(this, mArrayItems); 

希望します。

+0

ありがとう、また正しかった方向 – AdrianoCelentano

関連する問題