Usando findviewbyid en una clase que NO extiende Actividad en android
Tengo una clase que actualmente está extendiendo la actividad y tengo métodos como findViewById, ArrayAdapter, etc Quiero convertirlo en una clase independiente, pero todos los métodos anteriores se convierten en indefinido. ¿Cuál es el problema? ¿No sería suficiente importar las clases? Por ejemplo, importar android.view.View para findViewById, pero todavía no hace ninguna diferencia. Por favor avise.
- View.findViewById () devuelve null
- La diferencia entre LayoutInflater.inflate y findViewById
- FindViewById donde ID es cadena dinámica
- FindViewById dentro del fragmento
- getActivity (). findViewById (R.layout.contacts_list_view) devuelve null
- Android: ¿cómo puedo acceder a las vistas (utilizando findViewById) de una actividad de un fragmento onCreateView ()?
- Eficiencia de findViewById
- Huh? FindViewById () no se puede llamar dentro de onReceive ()?
- Android: ¿Cómo usar mediaController en la clase de servicio?
- Casting to Button es redundante - ¿Por qué?
- Android: un método findViewById () que devuelve valores que no necesitamos emitir
- ¿Cómo puedo encontrar el ID de un fragmento? Alternativamente, ¿cómo doy al fragmento una identificación?
- Cómo encontrar id de diseño en un botón de mapa de bits java fuente que he hecho
Debe pasar la instancia de su actividad a su segunda clase en el constructor de esta manera:
En tu Activity
Instanciate tu clase así:
MyClass instance = new MyClass(this);
Y en su segunda clase, el constructor será así:
public class MyClass { public Activity activity; //.... other attributes public MyClass( Activity _activity){ this.activity = _activity; //other initializations... } }
Y luego cuando quiera usar el método findViewById()
, puede hacer lo siguiente:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
Si desea llamar a cualquier función que pertenezca a la Activity
entonces lo único que necesita tener es el contexto de la Activity
.
p.ej.
class A extends Activity{ Context ctx; void oncreate(Bundle b) ctx = this; B bob = new B(ctx); } }
Aquí está la clase B.
Class B { B(Activity a) { a.anyFunctionOfActivity(); } }
FindViewById es un método público no estático de la clase de Activity
, por lo que sólo está disponible para un objeto de Activity
. Por lo tanto, importe android.view.View
y android.app.Activity
no lo hará disponible. Para hacerla disponible, usted podría pasar alrededor de un objeto de la Actvity
– generalmente un this
punto en su actividad. Sin embargo, tenga en cuenta que siempre debe actualizar su vista en el subproceso de interfaz de usuario.
Por favor intenta 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);