EditText arrangement on Android

1

I would like to know if I am doing it correctly. I have many EditText and it is difficult to be casting by casting assigning.

Before this I do the following:

EditText[] Informacion;
Informacion = new EditText[]{
                (EditText)findViewById(R.id.informacion_huerto),
                (EditText)findViewById(R.id.informacion_ubicacion),
                (EditText)findViewById(R.id.informacion_propietario),
                (EditText)findViewById(R.id.informacion_fijo),
                (EditText)findViewById(R.id.informacion_celular),
                (EditText)findViewById(R.id.informacion_productor),
                (EditText)findViewById(R.id.informacion_mercado),
                (EditText)findViewById(R.id.informacion_ponderado),
                (EditText)findViewById(R.id.informacion_descripcion)};

but I mark them null at the time of doing:

Informacion[0].setText("091783172831");
  

Error!    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference

    
asked by DoubleM 18.03.2017 в 08:15
source

3 answers

2

That's because you have not created the object of your EditText well, one way would be the following

EditText[] Informacion;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    .........
    Informacion = new EditText[]{createEditView(R.id.informacion_huerto),
            createEditView(R.id.informacion_propietario),
            createEditView(R.id.informacion_ubicacion)};
    Informacion[0].setText("091783172831");
}

public EditText createEditView(int id){
    EditText texto = (EditText) findViewById(id);
    return texto;
}
    
answered by 18.03.2017 в 15:44
2
EditText[] Informacion;

Make sure you get the views with findViewById () after adding the layout that contains these views

//primero esto
    setContentView(R.layout.your_layout);

//después ya puedes obtener los EditText
    Informacion = new EditText[]{
                    (EditText)findViewById(R.id.informacion_huerto),
                    (EditText)findViewById(R.id.informacion_ubicacion),
                    (EditText)findViewById(R.id.informacion_propietario),
                    (EditText)findViewById(R.id.informacion_fijo),
                    (EditText)findViewById(R.id.informacion_celular),
                    (EditText)findViewById(R.id.informacion_productor),
                    (EditText)findViewById(R.id.informacion_mercado),
                    (EditText)findViewById(R.id.informacion_ponderado),
                    (EditText)findViewById(R.id.informacion_descripcion)};
    
answered by 18.03.2017 в 17:44
1

I think you could do it in two ways:

A. Storing the EditText in an array:

EditText[] Informacion  = {informacion_huerto, informacion_ubicacion,
                           informacion_propietario, informacion_fijo,
                           informacion_celular, informacion_productor,           
                           informacion_mercado, informacion_ponderado,
                           informacion_descripcion};

B. Storing the EditText in an arrayList:

   List<EditText> Informacion = new ArrayList<EditText>(){{
     add(informacion_huerto);
     add(informacion_ubicacion);
     add(informacion_propietario);
     add(informacion_fijo);
     add(informacion_celular);
     add(informacion_productor);
     add(informacion_mercado);
     add(informacion_ponderado);
     add(informacion_descripcion);
   }};

I have not tried it, but it should work in both ways.

From this example you could also get something interesting: Add EditText (s) dynamically and retrieve values - Android

    
answered by 18.03.2017 в 11:28