Tengo una clase que actualmente se extiende Activity y tengo métodos como findViewById, ArrayAdapter etc. Quiero convertirlo en una clase independiente pero todos los métodos anteriores se vuelven indefinido ¿Cuál es el problema? ¿No debería ser suficiente importar las clases? Por ejemplo, importo android.view.View para findViewById pero aún no hace diferencia. por favor asesorar.usando findviewbyid en una clase que NO extiende Activity en android
Respuesta
debe pasar la instancia de su actividad a su segunda clase en el constructor de esta manera:
En su Activity
instanciate su clase como esta:
MyClass instance = new MyClass(this);
Y en su segunda clase, la constructor de será así:
public class MyClass {
public Activity activity;
//.... other attributes
public MyClass(Activity _activity){
this.activity = _activity;
//other initializations...
}
}
y luego cuando se quiere utilizar el findViewById()
método, se puede hacer así:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
findViewById es método público no estático de la clase Activity
, por lo que sólo estará disponible para un objetoActivity
. Por lo tanto, importar android.view.View
y android.app.Activity
no lo hará disponible. Para que esté disponible, puede pasar un objeto Actvity
, generalmente un punto this
en su actividad. Sin embargo, tenga en cuenta que siempre debe actualizar su Vista en el hilo de la interfaz de usuario.
Ok entiendo por qué no está disponible pero no se findViewById un método de la clase View? También podría explicar por qué siempre debemos actualizar nuestra Vista en el hilo de la interfaz de usuario (¿se refiere a la actividad principal?)? – Namratha
si quiere llamar a cualquier función que pertenece a Activity
continuación, lo único que necesitas es tener contexto de la Activity
.
por ejemplo.
class A extends Activity{
Context ctx;
void oncreate(Bundle b)
ctx = this;
B bob = new B(ctx);
}
}
Aquí es la clase B.
Class B
{
B(Activity a)
{
a.anyFunctionOfActivity();
}
}
Esto no funcionaría en un AsyncTask –
@IgorGanapolsky mismo aquí. ¿Qué se debe hacer para que esto funcione en AsyncTask? –
Por favor, intente lo siguiente:
public static View getLayoutByRes(@LayoutRes int layoutRes,@Nullable ViewGroup viewGroup)
{
final LayoutInflater factory = getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return factory.inflate(layoutRes, viewGroup);
}
TextView tv = (TextView) getLayoutByRes(R.layout.xxx ,Null).findViewById(R.id.editd);
- 1. Android: Necesito usar onSizeChanged para View.getWidth/Height() en la clase que extiende Activity
- 2. Android: cómo hacer que findViewById (R.id.xxx) trabaje en una clase heredando/extendiendo desde la clase View?
- 3. findViewById() no funciona en una clase no de actividad principal
- 4. Android: Usando findViewById() con una cadena/en un bucle
- 5. ¿Clase que se extiende?
- 6. Android findViewById en el servicio
- 7. Android - findViewById (R.id.list) devuelve nulo
- 8. java force una clase que se extiende
- 9. Android ViewPager findViewById que no trabaja - Siempre volver nula
- 10. clase interna que se extiende
- 11. android dialog activity position
- 12. Android Activity Background Image
- 13. Principiante Android Development: findViewById número
- 14. Inicie Android Activity directamente en Eclipse
- 15. ¿Por qué invokeDynamic en una clase que extiende Dynamic no funciona?
- 16. clase genérica que se extiende clase y aperos de interfaz
- 17. Android Activity Stack
- 18. cómo mostrar un mensaje de aviso emergente a partir de una clase que no se extiende Actividad
- 19. Clase StringUtils que no funciona en Android
- 20. android get activity devuelve nulo
- 21. Android OpenGL que extiende excepciones de puntero nulo GLSurfaceView
- 22. Usando el método smoothScrollBy en la clase ScrollView de Android
- 23. Actualizar Android Widget From Activity
- 24. Android - Activity Constructor vs onCreate
- 25. use startActivityForResult from no-activity
- 26. get padre extiende la clase en php
- 27. ¿No tengo que llamar a super() en el constructor cuando la clase extiende Sprite en actionscript3?
- 28. JAXB: Problema deserializar una clase B que se extiende una clase A
- 29. Extender FragmentActivity en lugar de Activity
- 30. Vista basada en clase que extiende UpdateView no guarda el formulario correctamente
Esto no funciona. findViewById solo se puede invocar en Actividad y no en Contexto. Intenté tu enfoque pero todavía me dio errores. – Namratha
Así que mira mi edición, solo pasa la instancia de la actividad en lugar del contexto :) – Houcine
Ok, lo hice :) Cuando invoco findViewById en el objeto Activity, la vista de lista que intento encontrar es NULL. ¿Eso es porque no he usado setContentView para el archivo XML que contiene el ListView antes? – Namratha