10

Ho un Fragment con un ListView. Nell'adattatore voglio creare una finestra di dialogo.Ottieni contesto attività in un adattatore da un frammento

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

mContext è la Context dal mio Fragment, che li risparmio globale quando è stato creato l'adattatore. Ho ricevuto l'errore.

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

Il metodo getActivity() non è disponibile così come ottenere il Context della mia Activity?

+3

invia altro codice. – Blackbelt

+0

'View.getContext()'? ... in ogni caso: 'che io salvi globale quando viene creato l'adattatore' metti il ​​contesto (che non è Applicazione) in qualche luogo come globale (FSM ci salvi)? – Selvin

+0

ho salvato il contesto in un variabel globale nel mio adattatore, dovrebbe il fsm salvarmi? (è fsm il mostro spagetthi volante?) – AdrianoCelentano

risposta

14

Quando si crea l'adattatore, cosa si passa come contesto? Prova a passare this se non lo stai facendo. Qualche altro codice sarebbe utile anche.

+0

ah shit non ho codificato questa parte, il difetto era il contesto che ottengo dal frammento è applicationContext e non il contesto di attività, sry non mi aspettavo questo – AdrianoCelentano

25

Se si dispone di un adattatore personalizzato, cambiare il costruttore per richiedere Context come parametro.

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

Quindi, creare una variabile di istanza per memorizzare il contesto tramite il costruttore.

private Context mContext; //instance variable 

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

E ora si può utilizzare la variabile mContext da qualsiasi punto della scheda.

Per creare l'adattatore, è sufficiente passare "questo" se creato da un'attività o getActivity() se creato da un frammento.

mAdapter = new CustomAdapter(this, mArrayItems); 

Spero che questo aiuti.

+0

grazie, era anche il diritto direzione – AdrianoCelentano

Problemi correlati