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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top