10

我有FragmentListView。在適配器中,我想創建一個對話框。從片段獲取適配器中的活動上下文

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()'? ...無論如何:'當我創建適配器時,我保存全局'你是否將Context(這不是應用程序)存儲爲全局的(FSM保存我們)? – Selvin

+0

我保存上下文在我的適配器中的全局變量中,fsm應該保存我嗎? (是fsm飛翔的spagetthi怪物?) – AdrianoCelentano

回答

14

當您創建適配器時,您作爲上下文傳遞了什麼?如果你不這樣做,試着通過this。更多的代碼也會有幫助。

+0

啊屎我沒有編碼這部分,故障是我從片段得到的上下文是applicationContext而不是活動上下文,sry沒有想到這個 – AdrianoCelentano

25

如果您有自定義適配器,請更改構造函數以要求Context作爲參數。

public CustomAdapter(Context context, List<Item> items) { 
} 

然後,通過構造函數創建一個Instance變量來存儲上下文。

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

相關問題