Получить контекст работы в адаптере из фрагмента

У меня есть Fragment с ListView. В адаптере я хочу создать диалог.

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

mContext является Context из моего Fragment, который я сохраняю глобальным при создании адаптера. Я получаю сообщение об ошибке.

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

Метод getActivity() недоступен, поэтому как получить Context моего Activity?

Ответ 1

Когда вы создаете свой адаптер, что вы передаете как контекст? Попытайтесь пройти this, если вы этого не сделаете. Также будет полезен еще один код.

Ответ 2

Если у вас есть пользовательский адаптер, измените конструктор, чтобы потребовать 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);

Надеюсь, что это поможет.