2011-10-12 10 views
24

Ho una vista personalizzata e desidero accedere a una stringa disponibile nella sua attività. Ho visto il codice che utilizza getContext() nella classe view, ma non esiste alcun metodo per accedere alla stringa che è stata resa disponibile alla sua attività tramite un intent. Come rendere una stringa in un'attività disponibile per la sua visualizzazione personalizzata?In che modo una visualizzazione personalizzata può accedere alla sua attività?

risposta

30

Il metodo getContext() nei rendimenti vista della classe il contesto che è stato passato al suo costruttore. Di solito è l'attività che desideri (l'attività estende il contesto). Quindi questo probabilmente funziona per voi:

((Activity)getContext()).someMethod(...); 
+1

simao perfetto, grazie mille. – turtleboy

+9

È una buona soluzione per i casi in cui la vista viene creata direttamente dall'attività. Questo non è sempre il caso. Se la vista è una vista di una finestra di dialogo o di una finestra popup, la trasmissione del contesto come attività comporterà un errore – EyalBellisha

+0

Come sottolinea @EyalBellisha, questo potrebbe non funzionare sempre. Nel caso di widget di compatibilità a contesto, come nel caso dell'estensione da 'android.support.v *', 'getContext()' non sarà del tipo Activity. Per AppCompatButton, ad esempio, è di tipo TintContextWrapper e non può essere lanciato su Activity. –

-5

Sono ancora un noob per java e Android, quindi questo potrebbe non funzionare, ma sto solo cercando di aiutare.

Si dovrebbe essere in grado di passare in parametri di intenti/attività che utilizzano "putExtra" e "getExtra", per esempio:

Nella vostra attività principale:

Intent EditDebtActivity = new Intent(getBaseContext(), EditDebt.class); 
     EditDebtActivity.putExtra(DbAdapter.KEY_ROWID,dRowID); 
     EditDebtActivity.putExtra(DbAdapter.KEY_DEBT, dName); 
     EditDebtActivity.putExtra(DbAdapter.KEY_STARTINGAMOUNT, dStartAmount); 
     EditDebtActivity.putExtra(DbAdapter.KEY_CURRENTAMOUNT, dCurrentAmount); 
     EditDebtActivity.putExtra(DbAdapter.KEY_DUEDATE, dDueDate); 
     EditDebtActivity.putExtra(DbAdapter.KEY_INTERESTRATE, dInterestRate); 
     EditDebtActivity.putExtra(DbAdapter.KEY_MINPAYMENT, dMinPayment); 
     startActivity(EditDebtActivity); 

Poi nel "onCreate" metodo nella nuova visualizzazione, utilizzare il seguente:

Bundle extras = getIntent().getExtras(); 
    dRowID = extras.getLong(DbAdapter.KEY_ROWID); 
    String rowidname = extras.getString(DbAdapter.KEY_DEBT); 
    currentamount = extras.getDouble(DbAdapter.KEY_CURRENTAMOUNT); 
    startingamount = extras.getDouble(DbAdapter.KEY_STARTINGAMOUNT); 
    duedate = extras.getInt(DbAdapter.KEY_DUEDATE); 

ovviamente ho usato il mio codice qui, ma sto passando le informazioni riga in una nuova attività quando un utente fa clic su un pulsante.

Vedi questo link Così, per ulteriori informazioni su come usare putextra e getextra: Sending arrays with Intent.putExtra

Spero che questo aiuti, è il mio primo contributo alla comunità :)

+0

R Hi tahnks per il primo contributo :) ho un listview che elenca i nomi dei file JPEG alla radice. quando l'utente seleziona, questo genera un intent con un nome file. l'attività di ricezione può ottenere il nome file ma la vista che è una vista personalizzata non può accedere al nome file. Grazie. – turtleboy

Problemi correlati