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 27/06/17, 19:59:08
Array

[xs_avatar]
javiandroid94 javiandroid94 no está en línea
Usuario poco activo
 
Fecha de registro: jun 2017
Mensajes: 3
Tu operador: Movistar

posicion de un listview

Tengo una base de datos que vuelco en un listview, al pulsar en el botón del listview paso a otro Activiy, necesito saber que elemento de la lista es el seleccionado.
He añadido un toast para saber que posicion obtenia pero era siempre 0.

Mi codigo:

public class MainActivity extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListen er {


@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

}
public void pulsao(View v){
Toast.makeText(context, "id es "+posicion1, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, Pago.class);
startActivity(intent);
}
Context context;
Button consultar;
ListView lista;
String rdia,rmes,rano,rhora,rminutos;



//Button consultarporid;
/*EditText idendificador;
EditText nombre;
EditText direccion;
TextView resultado;
ImageView imageView;
*

// IP de mi Url
String IP = "http://alquilalo.esy.es";
// Rutas de los Web Services
String GET = IP + "/obtener_alumnos.php";
String GET_BY_ID = IP + "/obtener_alumno_por_id_imagen.php";

String IMAGENES = IP + "/imagenes/";
ObtenerWebService hiloconexion;
int posicion1;

private ListView.OnItemClickListener onClickListView = new ListView.OnItemClickListener()
{
@Override
public void onItemClick(final AdapterView<?> adapter, View v, int position, long arg3)
{
//Ahora position tiene el valor de la posición del elemento clickado en el listview
posicion1=position;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);

rdia =getIntent().getExtras().getString("rdia");
rmes =getIntent().getExtras().getString("rmes");
rano =getIntent().getExtras().getString("rano");
rhora =getIntent().getExtras().getString("rhora");
rminutos =getIntent().getExtras().getString("rminutos");

context=this;


lista = (ListView) findViewById(R.id.listView1);
lista.setOnItemClickListener(onClickListView);


// Enlaces con elementos visuales del XML
//resultado = (TextView)findViewById(R.id.resultado);
consultar = (Button)findViewById(R.id.consultar);
//consultarporid = (Button)findViewById(R.id.consultarid);
// idendificador = (EditText)findViewById(R.id.eid);
//nombre = (EditText)findViewById(R.id.enombre);
//direccion = (EditText)findViewById(R.id.edireccion);
//resultado = (TextView)findViewById(R.id.resultado);
//imageView=(ImageView)findViewById(R.id.imageView);
// Listener de los botones

consultar.setOnClickListener(this);
// consultarporid.setOnClickListener(this);





}
public Context getContext(){
return context;
}
@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_main, 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) {
return true;
}

return super.onOptionsItemSelected(item);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.consultar:

hiloconexion = new ObtenerWebService();
hiloconexion.execute(GET,"1"); // Parámetros que recibe doInBackground

break;

default:

break;
}
}

/* public int ObtenerLongitudTabla(){
int longitud=15;
String cadena ="http://alquilalo.esy.es/obtener_alumnos.php" ;
URL url = null; // Url de donde queremos obtener información

try {
url = new URL(cadena);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Abrir la conexión
connection.setRequestProperty("User-Agent", "Mozilla/5.0" +
" (Linux; Android 1.5; es-ES) Ejemplo HTTP");
//connection.setHeader("content-type", "application/json");

int respuesta = connection.getResponseCode();
StringBuilder result = new StringBuilder();

if (respuesta == HttpURLConnection.HTTP_OK) {


InputStream in = new BufferedInputStream(connection.getInputStream()); // preparo la cadena de entrada

BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // la introduzco en un BufferedReader

// El siguiente proceso lo hago porque el JSONOBject necesita un String y tengo
// que tranformar el BufferedReader a String. Esto lo hago a traves de un
// StringBuilder.

String line;
while ((line = reader.readLine()) != null) {
result.append(line); // Paso toda la entrada al StringBuilder
}

//Creamos un objeto JSONObject para poder acceder a los atributos (campos) del objeto.
JSONObject respuestaJSON = new JSONObject(result.toString()); //Creo un JSONObject a partir del StringBuilder pasado a cadena
//Accedemos al vector de resultados

JSONArray alumnosJSON = respuestaJSON.getJSONArray("alumnos"); // estado es el nombre del campo en el JSON
longitud=alumnosJSON.length();


}


}


catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}

return longitud;
}
*

public class ObtenerWebService extends AsyncTask<String,Void,String>{
//Bitmap bitmap;
Bitmap[] bitmap = new Bitmap[15];
//ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
Bitmap bitmapotro;


ListViewAdapter adapter;
String[] titulo=new String[15];

String[] plazas=new String[15];
String[] puertas=new String[15];
String[] maletas=new String[15];
String[] aire=new String[15];
String[] transmision=new String[15];
String[] precio=new String[15];

@Override
protected String doInBackground(String... params) {

String cadena = params[0];
URL url = null; // Url de donde queremos obtener información
String devuelve ="";


if(params[1]=="1") { // Consulta de todos los alumnos

try {
url = new URL(cadena);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //Abrir la conexión
connection.setRequestProperty("User-Agent", "Mozilla/5.0" +
" (Linux; Android 1.5; es-ES) Ejemplo HTTP");
//connection.setHeader("content-type", "application/json");

int respuesta = connection.getResponseCode();
StringBuilder result = new StringBuilder();

if (respuesta == HttpURLConnection.HTTP_OK) {


InputStream in = new BufferedInputStream(connection.getInputStream()); // preparo la cadena de entrada

BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // la introduzco en un BufferedReader

// El siguiente proceso lo hago porque el JSONOBject necesita un String y tengo
// que tranformar el BufferedReader a String. Esto lo hago a traves de un
// StringBuilder.

String line;
while ((line = reader.readLine()) != null) {
result.append(line); // Paso toda la entrada al StringBuilder
}

//Creamos un objeto JSONObject para poder acceder a los atributos (campos) del objeto.
JSONObject respuestaJSON = new JSONObject(result.toString()); //Creo un JSONObject a partir del StringBuilder pasado a cadena
//Accedemos al vector de resultados

String resultJSON = respuestaJSON.getString("estado"); // estado es el nombre del campo en el JSON


if (resultJSON.equals("1")) { // hay alumnos a mostrar
JSONArray alumnosJSON = respuestaJSON.getJSONArray("alumnos"); // estado es el nombre del campo en el JSON
for (int i = 0; i < alumnosJSON.length(); i++) {
//se va a poder eliminar el devuelve este de aqui abajo i think

devuelve = devuelve + alumnosJSON.getJSONObject(i).getString("rutaimagen") + " " + "\n";

if (alumnosJSON.getJSONObject(i).getString("rutaimagen").equals("noimagen")) {
bitmap[i] = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
titulo[i]=alumnosJSON.getJSONObject(i).getString("modelo");


plazas[i]=alumnosJSON.getJSONObject(i).getString("plazas");
puertas[i]=alumnosJSON.getJSONObject(i).getString("puertas");
maletas[i]=alumnosJSON.getJSONObject(i).getString("maletas");
aire[i]=alumnosJSON.getJSONObject(i).getString("aire");
transmision[i]=alumnosJSON.getJSONObject(i).getString("transmision");
precio[i]=alumnosJSON.getJSONObject(i).getString("precio");

//bitmapArray.add(bitmap);

} else {
URL urlimagen = new URL(IMAGENES + alumnosJSON.getJSONObject(i).getString("rutaimagen"));
HttpURLConnection conimagen = (HttpURLConnection) urlimagen.openConnection();
conimagen.connect();
bitmap[i] = BitmapFactory.decodeStream(conimagen.getInputStream());
titulo[i]=alumnosJSON.getJSONObject(i).getString("modelo");

plazas[i]=alumnosJSON.getJSONObject(i).getString("plazas");
puertas[i]=alumnosJSON.getJSONObject(i).getString("puertas");
maletas[i]=alumnosJSON.getJSONObject(i).getString("maletas");
aire[i]=alumnosJSON.getJSONObject(i).getString("aire");
transmision[i]=alumnosJSON.getJSONObject(i).getString("transmision");
precio[i]=alumnosJSON.getJSONObject(i).getString("precio");

//bitmapArray.add(bitmap);
}

}

} else if (resultJSON.equals("2")) {
devuelve = "No hay alumnos";
}


}


} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return devuelve;
}

return null;
}

@Override
protected void onCancelled(String s) {
super.onCancelled(s);
}

@Override
protected void onPostExecute(String s) {
//resultado.setText(s);
//for (int i = 0; i < 5; i++) {
/
//imageView.setImageBitmap(bitmap);
//bitmap=bitmapArray.get(0);
//imageView.setImageBitmap(bitmap[0]);
//}
//imageView.setImageBitmap(bitmapotro);

//super.onPostExecute(s);
Context context = getContext();
adapter = new ListViewAdapter(context, titulo, bitmap,plazas,puertas,maletas,aire,transmision,precio);
lista.setAdapter(adapter);
//lista.setOnItemClickListener(ItemClicked item);



}

@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}

}

Mi listview:


public class ListViewAdapter extends BaseAdapter {
// Declare Variables
Context context;
String[] titulos;
Bitmap[] imagenes;
LayoutInflater inflater;

String[] plazas;
String[] puertas;
String[] maletas;
String[] aire;
String[] transmision;
String[] precio;

public ListViewAdapter(Context context, String[] titulos, Bitmap[] imagenes, String[] plazas,String[] puertas,String[] maletas,String[] aire,String[] transmision,String[] precio) {
this.context = context;
this.titulos = titulos;
this.imagenes = imagenes;
this.plazas=plazas;
this.puertas=puertas;
this.maletas=maletas;
this.aire=aire;
this.transmision=transmision;
this.precio=precio;

}

@Override
public int getCount() {
return titulos.length;
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {

// Declare Variables
TextView txtTitle;
TextView txprecio;
ImageView imgImg;
TextView txplazas;
TextView txpuertas;
TextView txmaletas;
TextView txaire;
TextView txtransmision;
//http://developer.android.com/intl/es/reference/android/view/LayoutInflater.html
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View itemView = inflater.inflate(R.layout.list_row, parent, false);

// Locate the TextViews in listview_item.xml
txtTitle = (TextView) itemView.findViewById(R.id.list_row_title);
imgImg = (ImageView) itemView.findViewById(R.id.list_row_image);

// Capture position and set to the TextViews
txtTitle.setText(titulos[position]);
imgImg.setImageBitmap(imagenes[position]);

txplazas = (TextView) itemView.findViewById(R.id.tplazas);
txpuertas = (TextView) itemView.findViewById(R.id.tpuertas);
txmaletas = (TextView) itemView.findViewById(R.id.tmaletas);
txaire = (TextView) itemView.findViewById(R.id.taire);
txtransmision = (TextView) itemView.findViewById(R.id.ttransmision);
txprecio = (TextView) itemView.findViewById(R.id.tprecio);


txtTitle.setText(titulos[position]);
imgImg.setImageBitmap(imagenes[position]);
txplazas.setText(plazas[position]);
txpuertas.setText(puertas[position]);
txmaletas.setText(maletas[position]);
txaire.setText(aire[position]);
txtransmision.setText(transmision[position]);
txprecio.setText(precio[position]);

return itemView;
}
}
Responder Con Cita


  #2  
Viejo 27/06/17, 20:58:20
Array

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

Bienvenido al foro, siendo el primer mensaje no está de más presentarse en el foro de presentaciones vez de ir a saco a que resolvamos la duda.

Lo primero, ¡vaya selva de código! Cuando quieras que alguien te ayude pon solo el código relevante e intenta seguir un poco el hilo de ejecución y separarlo. Muchos le dais al copy-paste de toooodo y tan contentos.

Dentro de esa selva veo que la tostada la tienes en un método que se llama pulsao, pero a ese método no se le llama en ningún sitio del código que has puesto (¿es de un botón del layout?). El position en efecto te lo da el onItemClick cuando pulsas un item de la lista, y es ahí donde deberías poner la tostada y el código que necesites ejecutar sabiendo la posición. De paso, comprueba si el onItemClick se está ejecutando o no, con tanto listener por ahí me pierdo
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 27/06/17, 22:02:57
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Además de lo que te ha dicho mocelet, yo te dejo unos cuantos consejos viendo tu código:

1) No uses ListView, usa RecyclerView. Son mucho más escalables (un mismo Adapter te vale para los 3 tipos de listas posibles), personalizables y además las funciones son más claras (separa la creación de la vista de su bindeo, cosa que en ListView nunca ha quedado del todo claro)

2) No uses un AsyncTask para una llamada HTTP, usa librerías específicas como Volley o Retrofit.

3) No deserializes un JSON a pelo, su escalabilidad es muy poca y su tolerancia a cambios nula. Usa librerías específicas para deserializar como GSON.

Y por último, si las vistas que están contenidas dentro de los elementos del ListView son focusables, nunca se ejecutará el onItemClick (por eso no me gusta usarlo y prefiero ponerle un evento onClick a la View principal de cada elemento), así que nunca se actualizará tu variable "posicion1".
Responder Con Cita
  #4  
Viejo 07/07/17, 16:29:33
Array

[xs_avatar]
javiandroid94 javiandroid94 no está en línea
Usuario poco activo
 
Fecha de registro: jun 2017
Mensajes: 3
Tu operador: Movistar

 Cita: Originalmente Escrito por mocelet Ver Mensaje
Bienvenido al foro, siendo el primer mensaje no está de más presentarse en el foro de presentaciones vez de ir a saco a que resolvamos la duda.

Lo primero, ¡vaya selva de código! Cuando quieras que alguien te ayude pon solo el código relevante e intenta seguir un poco el hilo de ejecución y separarlo. Muchos le dais al copy-paste de toooodo y tan contentos.

Dentro de esa selva veo que la tostada la tienes en un método que se llama pulsao, pero a ese método no se le llama en ningún sitio del código que has puesto (¿es de un botón del layout?). El position en efecto te lo da el onItemClick cuando pulsas un item de la lista, y es ahí donde deberías poner la tostada y el código que necesites ejecutar sabiendo la posición. De paso, comprueba si el onItemClick se está ejecutando o no, con tanto listener por ahí me pierdo

Gracias por los consejos, soy nuevo y no controlo mucho.
Responder Con Cita
  #5  
Viejo 07/07/17, 16:31:02
Array

[xs_avatar]
javiandroid94 javiandroid94 no está en línea
Usuario poco activo
 
Fecha de registro: jun 2017
Mensajes: 3
Tu operador: Movistar

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Además de lo que te ha dicho mocelet, yo te dejo unos cuantos consejos viendo tu código:

1) No uses ListView, usa RecyclerView. Son mucho más escalables (un mismo Adapter te vale para los 3 tipos de listas posibles), personalizables y además las funciones son más claras (separa la creación de la vista de su bindeo, cosa que en ListView nunca ha quedado del todo claro)

2) No uses un AsyncTask para una llamada HTTP, usa librerías específicas como Volley o Retrofit.

3) No deserializes un JSON a pelo, su escalabilidad es muy poca y su tolerancia a cambios nula. Usa librerías específicas para deserializar como GSON.

Y por último, si las vistas que están contenidas dentro de los elementos del ListView son focusables, nunca se ejecutará el onItemClick (por eso no me gusta usarlo y prefiero ponerle un evento onClick a la View principal de cada elemento), así que nunca se actualizará tu variable "posicion1".
Puff cuantos buenos consejos, me hubiesen venido bien al principio, ahora ya está todo hecho así. Para la proxima te haré caso. Gracias
Responder Con Cita
Respuesta

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



Hora actual: 16:44:15 (GMT +2)



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

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