|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
Problema muy simple al pulsar un boton
Lo que me pasa es que andaba creando mi 1º app que es una calculadora que solo suma con 2 edittext 1 boton y otro edittext donde me muestra el resultado de la suma, el problema que tengo es que si no introduzco ningun numero en los campos al pulsar el boton de Sumar se produce un error porque no esta considerado que los campos se pueden dejar en blanco, y estaba intentando mirar alguna forma de ver cuando estan los campos en blanco y decirle al usuario que no puede dejar campos en blanco pero no se como.
He intentando hacer un if en el que mirase si el contenido era nulo pero no funciona, este es el if: Código:
temp = (TextView) findViewById(R.id.Numero1); float num1 = Float.parseFloat(temp.getText().toString()); if (temp.getText().toString().equals("")){ num1=0; }
__________________
![]() |
|
#2
|
||||
|
||||
Mete el Float.parseFloat en un bloque try catch y a correr. Si salta la excepción está vacío o no es un número correcto (y avisas al usuario si quieres), si va bien es un número y haces tus cuentas.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#3
|
||||
|
||||
Aquí te va:
try { númerofloat= Float.parseFloat(temp.getText().toString()); z = 1; } catch (Exception e) { z = 2; } if(z==1){ //Haces la operacion } if(z==2) { Toast toast1 = Toast.makeText(getApplicationContext(), "No ha escrito correctamente los campos",Toast.LENGTH_SHORT); toast1.show(); //Aquí podrías borrar todos lo campos que se habían escrito con un .setText("") } La segunda pregunta no estoy muy seguro de entenderte, si te refieres a apretar el botón menú del teléfono,que normalmente es un botón físico, para que te salgan botones primero tuviste q haber creado un menú en el archivo xml (q es lo más sencillo), luego enlazarlo a la activity que quieres que lo muestre y finalmente asociar a los botones lo que quieras hacer. No sé si te refieres a eso o a otra cosa. Saludos. |
#4
|
||||
|
||||
Sorry por no contestar antes pero es que me ha liado mi hermana para incharle un pelota de estas de fitness..
![]() Muchas gracias, me ha servido a la primera. ![]() La otra pregunta la muestro mejor con foto que se entendera mejor, la app es esta https://www.dropbox.com/s/vhj95uubms...4-16-19-51.png y para probar las activitys he creado un boton en la parte de abajo a la derecha que me lleva a un panel de ajustes pero nada mas crear una app con el ADT 20, cuando pulsas el boton fisico de menu(que no se si tendra un nombre determinado, si es asi y me lo podeis decir os lo agradeceria puesto que me gusta llamar a las cosas por su nombre ^^) te aparece el panel ese que ves abajo que pone Ajustes y yo queria que al darle ahi me llevara a otra activity donde me aparezcan los ajustes, me imagino que sera una chorrada y es cambiar una linea pero no lo veia, ahora sabiendo que es declarado en el xml buscare haber donde esta y si consigo hacerlo ![]()
__________________
![]() |
#5
|
||||
|
||||
Yo no uso el ADT 20 así que igual no va así, yo si quiero que me aparezca algo al apretar el botón menú (q por cierto no se si tiene un nombre determinado) tengo que definirlo, pero por si acaso fíjate en el xml si pone una etiqueta q lleve el nombre menu, si la lleva es ahi, si no no sé cómo va, pero de todas maneras ese botón tiene que tener un identificador en algún lado, fíjate el archivo R.java que ahí debería aparecer.
|
#6
|
||||
|
||||
Parece que crea dentro de la carpeta /res, una carpeta llamada /menu que contiene un activity_main.xml en el que unicamente hay esto:
Código:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_settings" android:title="@string/menu_settings" android:orderInCategory="100" android:showAsAction="never" /> </menu> Código:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } Código:
if(view.getId()==findViewById(R.id.ajustes).getId()) { Intent settings = new Intent(this, Settings.class); startActivity(settings); } Código:
package com.empresa.calculadorabasica; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.*; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class Main extends Activity implements OnClickListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View boton = findViewById(R.id.BtnSumar); boton.setOnClickListener(this); View settings = findViewById(R.id.ajustes); settings.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void onClick (View view){ float num1=0,num2=0; if(view.getId()==findViewById(R.id.BtnSumar).getId()) { TextView temp; EditText resultado = (EditText) findViewById(R.id.Resultado_Suma); temp = (TextView) findViewById(R.id.Numero1); try { num1 = Float.parseFloat(temp.getText().toString()); } catch (Exception e) { Toast aviso =Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT); aviso.show(); } temp = (TextView) findViewById(R.id.Numero2); try { num2 = Float.parseFloat(temp.getText().toString()); } catch (Exception e) { Toast aviso =Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT); aviso.show(); } resultado.setText("resultado : "+(num1+num2)); } if(view.getId()==findViewById(R.id.ajustes).getId()) { Intent settings = new Intent(this, Settings.class); startActivity(settings); } } } Siento si soy muy pesado :P
__________________
![]() |
#7
|
||||
|
||||
Puedes definir un atributo onClick en los elementos que llamará al método que pongas, sin tener que comprobar si el Id es el mismo o no. P.ej.
Código:
android:onClick="hazSuma" Código:
public void hazSuma(View view) { }
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#8
|
||||
|
||||
Lo consegui a la segunda
![]() La primera seguia dejando los setOnClickListener en el metodo onCreate() y claro no funcionaba. Mucho mejor asi, hay alguna diferencia de rendimiento entre estas 2 formas?O alguna de ellas esta mejor que otra? EDIT: Lo que no he conseguido es implementar el android ![]()
__________________
![]() |
#9
|
||||
|
||||
Usa este método, fuera del método Onclick, a ver si te funciona:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: //Este id no estoy seguro de que sea así. Intent settings = new Intent(this, Settings.class); startActivity(settings); return true; default: return super.onOptionsItemSelected(item); } } En principio con eso al apretar el boton físico de menú y apretar el botón de ajustes que te sale, debería mandarte a la Settings.class. De todas formas yo te recomendaría que separes los métodos OnClick, creo que queda más ordenado y de esa forma se ve bien a qué botón va asociada cada acción. |
#10
|
||||
|
||||
Funciona a la primera y a la perfeccion
![]() ![]() En principio lo he puesto ahora como decia mocelet y queda asi el Main.java: Código:
public class Main extends Activity implements OnClickListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: //Este id no estoy seguro de que sea así. Intent settings = new Intent(this, Settings.class); startActivity(settings); return true; default: return super.onOptionsItemSelected(item); } } public void suma(View view) { float num1=0,num2=0; if(view.getId()==findViewById(R.id.BtnSumar).getId()) { TextView temp; EditText resultado = (EditText) findViewById(R.id.Resultado_Suma); temp = (TextView) findViewById(R.id.Numero1); try { num1 = Float.parseFloat(temp.getText().toString()); } catch (Exception e) { Toast aviso =Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT); aviso.show(); } temp = (TextView) findViewById(R.id.Numero2); try { num2 = Float.parseFloat(temp.getText().toString()); } catch (Exception e) { Toast aviso =Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT); aviso.show(); } resultado.setText("resultado : "+(num1+num2)); } } public void ajustes(View view) { Intent settings = new Intent(this, Settings.class); startActivity(settings); } public void onClick (View view){ } } El onClick vacio mas que nada lo he dejado porque estoy siguiendo una serie de tutoriales y en el siguiente tocan eventos OnClickListener y me imagino que tocare ese metodo otra vez.
__________________
![]() |
#11
|
||||
|
||||
Así está perfecto y se entiende muy bien. Me alegro q te funcionase así aprendemos todos, pq yo no estaba muy seguro de que te tirase xd.
|
![]() |
![]() |
||||||
|