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

相关问题