El caso es que tengo 2 EditText
(tipo numéricos) creados desde XML
. Agregué un botón para "Guardar Cambios" desde el menú cuando los 2 campos estén completos. Escribí código para casos en donde alguno de los 2 campos estén vacíos y funciona. Pero cuando quiero agregar de manera dinámica otros 2 EditText
mediante un botón y agrego código para representar esos casos en que esté vacío, no me funciona. Es decir, si yo solamente quisiera completar los campos que fueron creados desde XML
, me salta el error mencionado en el título, pero... si doy clic en el botón "add" donde agrego 2 nuevos campos y quiero "Guardar Cambios" ahí no tengo problemas. Pero no tendría que funcionar de esa manera.
Alguien sabe cual puede ser el problema?
Aquí el código en JAVA:
public class cargas_descargas extends AppCompatActivity {
ImageButton btnAddArt;
/*Definir variables tipo EditText para implementarlas luego en el contenido de sus campos*/
EditText eTcantCarga;
EditText eTcantDescarga;
//Para la nueva tupla creada cuando se requiere añadir nuevos campos
EditText editTextCarga_new_art_xml;
EditText editTextDescarga_new_art_xml;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cargas_descargas);
btnAddArt = (ImageButton) findViewById(R.id.add_art);
btnAddArt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AgregarNewArtXML();
}
}
});
eTcantCarga = (EditText) findViewById(R.id.edtx_carga);
eTcantDescarga = (EditText) findViewById(R.id.edtx_descarga);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
public void AgregarNewArtXML() {
ScrollView sv = (ScrollView) findViewById(R.id.scrl);
LinearLayout rootLayoutVertical = (LinearLayout) findViewById(R.id.layout_vertical);
//Crear un contenedor (LinearLayout horizontal) programáticamente
LinearLayout.LayoutParams rootLayoutHorizontalParams = new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
final LinearLayout rootLayoutHorizontalProgramatico = new LinearLayout(this);
rootLayoutHorizontalProgramatico.setLayoutParams(rootLayoutHorizontalParams);
rootLayoutHorizontalProgramatico.setOrientation(LinearLayout.HORIZONTAL);
rootLayoutHorizontalProgramatico.setWeightSum(2);
ImageButton btnMenosArt = new ImageButton(this);
btnMenosArt.setLayoutParams(new LinearLayout.LayoutParams(45, LinearLayout.LayoutParams.WRAP_CONTENT));
btnMenosArt.setBackgroundResource(R.drawable.ic_menos_art);
rootLayoutHorizontalProgramatico.addView(btnMenosArt);
//botón para eliminar la fila creada con el ImageButton con icono de "signo menos"
btnMenosArt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (rootLayoutHorizontalProgramatico.getChildCount() > 0) {
rootLayoutHorizontalProgramatico.removeAllViews();
}
}
});
//Creo los 2 EditText de manera dinámica
editTextCarga_Programatico = new EditText(this);
editTextCarga_Programatico.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1));
editTextCarga_Programatico.setInputType(InputType.TYPE_CLASS_NUMBER);
editTextCarga_Programatico.setHint("Cantidad");
rootLayoutHorizontalProgramatico.addView(editTextCarga_Programatico);
editTextDescarga_Programatico = new EditText(this);
editTextDescarga_Programatico.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1));
editTextDescarga_Programatico.setInputType(InputType.TYPE_CLASS_NUMBER);
editTextDescarga_Programatico.setHint("Cantidad");
rootLayoutHorizontalProgramatico.addView(editTextDescarga_Programatico);
rootLayoutVertical.addView(rootLayoutHorizontalProgramatico);
}
@Override
public boolean onCreateOptionsMenu (Menu menu){
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cargas_descargas, menu);
return true;
}
@Override
public boolean onOptionsItemSelected (MenuItem item){
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings_carga_descarga) {
return true;
}
//Botón menú para "Guardar cambios"
if (id == R.id.action_save_tanda) {
String AuxiliarCantCargas = eTcantCarga.getText().toString();
String AuxiliarCantDescargas = eTcantDescarga.getText().toString();
String AuxiliarCantCargas_Programatico = editTextCarga_Programatico.getText().toString();
String AuxiliarCantDescargas_Programatico = editTextDescarga_Programatico.getText().toString();
//Estructura repetitiva para duplicar el tiempo de duración del Toast
for (int i = 0; i < 2; i++) {
/*Comienzo de las estructuras selectivas para que cada campo de la fila hech en XML esté completo*/
//PRIMER CASO: Estructura selectiva para indicar que todos los campos están vacios
if (AuxiliarCantCargas.isEmpty() && AuxiliarCantDescargas.isEmpty()) {
Toast.makeText(getApplicationContext(), "Error! Los campos están vacíos. Por favor, complete todos los campos", Toast.LENGTH_LONG).show();
}
else if (AuxiliarCantCarga.isEmpty()) {
Toast.makeText(getApplicationContext(), "Error! El campo de carga está vacío. Por favor complete el campo correspondiente con datos válidos!", Toast.LENGTH_LONG).show();
}
else if (AuxiliarCantDescarga.isEmpty()) {
Toast.makeText(getApplicationContext(), "Error! El campo de descarga está vacío. Por favor complete el campo correspondiente con datos válidos!", Toast.LENGTH_LONG).show();
}
//USO DE LAS VARIABLES EditText programaticas
else if (AuxiliarCantCargas_Programaticas.isEmpty() && AuxiliarCantDescargas_Programaticas.isEmpty()) {
Toast.makeText(getApplicationContext(), "Error! Los campos de la nueva fila creada dinamicamente están vacios. Por favor, complete los campos correspondientes", Toast.LENGTH_LONG).show();
}
else if (AuxiliarCantCargas_Programaticas.isEmpty(){
Toast.makeText(getApplicationContext(), "Error! El campo de carga de la fila dinamica está vacío. Por favor, complete el campo correspondiente", Toast.LENGTH_LONG).show();
}
else if (AuxiliarCantDescargas_Programaticas.isEmpty(){
Toast.makeText(getApplicationContext(), "Error! El campo de descarga de la fila dinamica está vacío. Por favor, complete el campo correspondiente", Toast.LENGTH_LONG).show();
}
//ULTIMO CASO:
else {
Toast.makeText(getApplicationContext(), "Los cambios fueron guardados con éxito", Toast.LENGTH_LONG).show();
finish();
}
}
return true;
}
Código en XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nueva_cd"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".cargas_descargas"
tools:showIn="@layout/activity_cargas_descargas">
<ScrollView
android:id="@+id/scrl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/layout_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@android:color/holo_blue_dark">
<ImageButton
android:id="@+id/add_art"
android:layout_width="45dp"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:src="@drawable/ic_add_new_art" />
<EditText
android:id="@+id/edtx_carga"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Cantidad"
android:inputType="number" />
<EditText
android:id="@+id/edtx_descarga"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="Cantidad"
android:inputType="number" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>