2011-10-12 9 views
24

Tengo una vista personalizada y me gustaría acceder a una cadena que está disponible en su actividad. He visto código que usa getContext() en la clase de vista, pero no hay ningún método para acceder al String que se ha puesto a disposición de su actividad mediante un intento. ¿Cómo hacer que una cadena en una actividad esté disponible para su vista personalizada?¿Cómo puede una vista personalizada tener acceso a su actividad?

Respuesta

30

El método getContext() en las declaraciones de vista de clase el contexto que pasó en su constructor. Por lo general, esa es la actividad que desea (la actividad amplía el contexto). Así que esto probablemente funcione para usted:

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

simao perfecto, muchas gracias. – turtleboy

+9

Es una buena solución para los casos en que la Vista es creada directamente por la Actividad. Este no es siempre el caso. Si la vista es una vista de un cuadro de diálogo o una ventana emergente, fundir el contexto como una actividad dará como resultado un error – EyalBellisha

+0

Como señala @EyalBellisha, esto podría no funcionar siempre. En el caso de los widgets de compatibilidad envueltos en contexto, como es el caso cuando se extiende desde 'android.support.v *', 'getContext()' no será del tipo Activity. Para AppCompatButton, por ejemplo, es del tipo TintContextWrapper y no se puede convertir a Activity. –

-5

Soy un novato en Java y Android, así que puede que esto no funcione, pero solo estoy tratando de ayudar.

Usted debe ser capaz de pasar en los parámetros a Propósitos/actividades utilizando "putExtra" y "getExtra", por ejemplo:

en su actividad principal:

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); 

Luego, en el "onCreate" método en su nuevo punto de vista, utilice la siguiente:

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); 

, obviamente, he usado mi propio código aquí, pero estoy pasando información de la fila en una nueva actividad cuando un usuario hace clic en un botón.

ver este enlace SO para obtener más información sobre el uso de putextra y getextra: Sending arrays with Intent.putExtra

Espero que esto ayude, es mi primera contribución a la comunidad :)

+0

R Hi tahnks para su primera contribución :) tengo una vista de lista que enumera los nombres de los archivos JPEG en la raíz. cuando el usuario selecciona, dispara un intento con un nombre de archivo. la actividad de recepción puede obtener el nombre del archivo, pero su vista, que es una vista personalizada, no puede acceder al nombre del archivo. Gracias. – turtleboy

Cuestiones relacionadas