Ответ 1
Когда вы создаете свой адаптер, что вы передаете как контекст? Попытайтесь пройти this
, если вы этого не сделаете. Также будет полезен еще один код.
У меня есть 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
?
Когда вы создаете свой адаптер, что вы передаете как контекст? Попытайтесь пройти this
, если вы этого не сделаете. Также будет полезен еще один код.
Если у вас есть пользовательский адаптер, измените конструктор, чтобы потребовать 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);
Надеюсь, что это поможет.