10

Mam Fragment z ListView. W adapterze chcę utworzyć okno dialogowe.Uzyskaj kontekst aktywności w adapterze z fragmentu

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

mContext jest Context z mojego Fragment, który ratuję globalny, gdy adapter jest tworzony. Dostaję błąd.

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

Sposób getActivity() nie jest dostępny tak jak uzyskać Context mojego Activity?

+3

dodaj więcej kodu. – Blackbelt

+0

'Widok.getContext()'? ... w każdym razie: "które zapisuję globalnie, gdy adapter jest tworzony" czy przechowujesz kontekst (który nie jest aplikacją) gdzieś jako globalny (FSM nas ratuje)? – Selvin

+0

i zapisać kontekst w globalnej variabel w moim adapterze, powinny fsm mnie zapisać? (czy fsm to latający potwór spagetthi?) – AdrianoCelentano

Odpowiedz

14

Podczas tworzenia adaptera, co przekazujesz jako kontekst? Spróbuj spasować this, jeśli nie robisz tego. Pomocne byłoby też trochę więcej kodu.

+0

ah gówno nie zakodowałem tej części, wina była kontekstem, który dostałem z fragmentu to kontekst aplikacji, a nie kontekst aktywności, nie spodziewałam się, że ten – AdrianoCelentano

25

Jeśli masz niestandardową kartę, zmień konstruktor, aby wymagał Context jako parametru.

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

Następnie utwórz zmienną Instance, aby zapisać kontekst za pomocą konstruktora.

private Context mContext; //instance variable 

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

Teraz można używać zmiennej mContext z dowolnego miejsca w adapterze.

Aby utworzyć adapter, wystarczy przekazać "to", jeśli utworzono go z działania, lub getActivity(), jeśli utworzono z fragmentu.

mAdapter = new CustomAdapter(this, mArrayItems); 

Nadzieję, że pomaga.

+0

dziękuje, był również właściwy kierunek – AdrianoCelentano

Powiązane problemy