Uso de FindViewByID en una clase que no extiende la actividad en Android
-
26-10-2019 - |
Pregunta
Tengo una clase que actualmente extiende la actividad y tengo métodos como FindViewByid, ArrayAdapter, etc. Quiero convertirla en una clase independiente, pero todos los métodos anteriores quedan indefinidos. ¿Cuál es el problema? ¿No debería importar las clases ser suficientes? Para por ejemplo, importo android.view.view para FindViewByid, pero aún no hace ninguna diferencia. Por favor avise.
Solución
Debe pasar la instancia de su actividad a su segunda clase en el constructor así:
En tus Activity
Instanciar su clase así:
MyClass instance = new MyClass(this);
Y en tu 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 quieras usar el findViewById()
Método, puede hacer así:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
Otros consejos
Si desea llamar a cualquier función que pertenezca a Activity
Entonces, lo único que necesita tener es el contexto del 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 el método público no estático del Activity
Clase, por lo que solo estará disponible para un Activity
objeto. Por lo tanto, importar android.view.View
y android.app.Activity
No lo pondrá disponible. Para ponerlo a disposición, puede pasar por un Actvity
Objeto: generalmente un this
señalar su actividad. Sin embargo, observe que siempre debe actualizar su vista en el hilo de la 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);