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

Respuesta
 
Herramientas
  #1  
Viejo 14/08/12, 13:05:22
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
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;
}
Y bueno otra duda que me surgia es que en los tutoriales he hecho que al pulsar otro boton se abra otra activity pero yo queria que al pulsar el boton de ajustes que aparece al darle al boton de menu se abriera una activity donde estuvieran los ajustes pero no veo donde esta este boton declarado en el codigo.
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita


  #2  
Viejo 14/08/12, 13:13:18
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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!
Responder Con Cita
  #3  
Viejo 14/08/12, 14:03:41
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
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.
Responder Con Cita
  #4  
Viejo 14/08/12, 16:26:11
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
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
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #5  
Viejo 14/08/12, 18:42:19
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
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.
Responder Con Cita
  #6  
Viejo 14/08/12, 19:20:18
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
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>
Hasta ahi sin problemas, pero luego en el Main.java se crea el menu asi:
Código:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
y claro yo lo que tenia puesto en el boton era:
Código:
    	if(view.getId()==findViewById(R.id.ajustes).getId())
    	{
    		Intent settings = new Intent(this, Settings.class);
    		startActivity(settings);
    	}
pero si cambio el R.id.ajustes a R.id.menu_settings no funciona, dejo el Main.java completo por si he hecho alguna otra cosa mal y no lo se:
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);
    	}
    	
    	
    }
}
De verdad que se pone todo eso en el metodo onClick? Hasta ahora solo habia dado java como lenguaje de programacion y en los programas simples intentaba que los metodos no pasaran de las 15 lineas, y en esta app que no hace casi nada que un metodo ocupe tanto me hace preguntarme si de verdad lo estare haciendo bien.

Siento si soy muy pesado :P
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #7  
Viejo 14/08/12, 19:37:20
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

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"
Eso llamará al método

Código:
public void hazSuma(View view) {

}
de forma automágica.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #8  
Viejo 14/08/12, 19:58:36
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
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 androidnClick en el elemento del menu, por lo cual sigo teniendo que abrir la activity de las settings usando el boton de la parte inferior derecha..
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #9  
Viejo 14/08/12, 20:39:13
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
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.
Responder Con Cita
  #10  
Viejo 14/08/12, 20:50:49
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Funciona a la primera y a la perfeccion Por ahora lo dejare asi y cuando sepa un poco mas haber si consigo hacerlo andar de la otra forma

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){
    	
    }
}
No se si es la forma que dices tu o hay otra forma en la que llamar a los metodos public void OnClickAjustes() o algo asi, yo todo lo que me enseñeis lo voy poniendo en practica y me quedo con ello.
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.
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #11  
Viejo 14/08/12, 20:58:05
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 13:41:53 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /