studio setvisibility requestfocus minwidth example clase android android-view

android - setvisibility - findViewById() no funciona en una clase que no sea MainActivity



view android studio (4)

Tengo una vista de texto en mi Lyout y me gustaría configurar un texto para esta vista de texto. Esto debe hacerse en una clase que no sea una clase MainActivity.

El problema es que tengo una excepción de puntero nulo.

Aquí está mi código:

public class UserInformations extends Activity{ TextView emailTextView; LocalDatabase localdatabase= new LocalDatabase(this); public void getUserInformation() { emailTextView = (TextView) findViewById(R.id.EmailTextView); String email = localdatabase.getUserEmail(); emailTextView.setText(email); } }

Cuando hago esto en la clase de actividad principal, funciona, pero no funciona en otra clase.


¿Aún no has configurado la vista de contenido?

para hacer esto usa algo como esto:

public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }


Llamar a findViewById() en el objeto Activity solo funcionará si el diseño de Activity actual está establecido por setContentView . Si agrega un diseño a través de otros medios, necesita el objeto View del diseño y llamar a findViewById() en él.

View v = inflater.inflate(id_number_of_layout); # such as R.layout.activity_main View innerView = v.findViewById(id_number_of_view_inside_v);

Si se supone que el diseño es el diseño principal de la actividad, haz esto:

public class MyActivity extends Activity{ TextView emailTextView; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(id_number_of_layout); emailTextView = (TextView) findViewById(R.id.EmailTextView); // ... whatever other set up you need to do ... } public void getUserInformation() { // .... regular code ... } }


Cuando llamas a findViewById importa. El diseño ya debe haber ocurrido. Ya debe haber configurado una vista de contenido, etc.

Hay formas de solucionar esto, como se muestra en otras respuestas, pero funcionan de manera fundamentalmente diferente a findViewById , y solo deben usarse como sustituto si usted entiende exactamente cómo funcionan. En la mayoría de los casos, es mucho más eficiente simplemente esperar hasta que el diseño inicial ya haya ocurrido.


findViewById(R.id.EmailTextView);

Tu tampoco

  1. No se estableció el diseño de vista
  2. No tiene Vista con ID EmailTextView y, por lo tanto, findViewById devuelve null . No tiene que poner el tipo, sino el ID que le dio en el XML.

EDIT: definitivamente el 1 basado en tus nuevos comentarios.