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.
- Android: ¿Cómo usar mediaController en la clase de servicio?
- No es necesario emitir el resultado de findViewById?
- ¿Cómo puedo asignar un ID a una vista mediante programación?
- NullPointerException al llamar a findViewById () para obtener la vista de un fragmento
- ¿Por qué obtener NoSuchFiledException al usar otro proyecto android como biblioteca?
- FindViewById () devuelve null - intentado TODO
- FindViewById devuelve null - Android - setContentView
- FindViewById devuelve el elemento erróneo?
- Cómo inflar correctamente un diseño con un ViewFlipper anidado?
- Eficiencia de findViewById
- Excepción de conversión de clase a la misma clase en Android
- View.findViewById () devuelve null
- FindViewById dentro del fragmento
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);