URGENTE o.O Problema con cambiar textview dentro de un custom ListView

8 views
Skip to first unread message

RADM

unread,
Mar 15, 2017, 12:26:41 PM3/15/17
to desarrolladores-android

hola, antes que nada espero esten muy bien . espero de ante mano puedan ayudarme.

tengo un problema, tengo un textview ( en realidad cualquier control que conlleve un valor como el seekbar  le pasa lo mismo) dentro de un custom ListView al cambiarle el estado dentro  de un item de la lista  otros cambian a pesar de que  utilizo un holder  pero aparentemente algo va mal .


Como ven la imagen que esta abajo la parte izquierda es el inicio de la lista y le doy en cambiar la cantidad , el problema es que al bajar el scroll hay items que toman ese valor tal como se ve en la imagen de la derecha.


 dejo el código del adapter por si alguien tiene idea de como puedo resolver este problema

package com.tupanacharcutero.tpc;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ScrollView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;
import com.squareup.picasso.Picasso;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONObject;

import java.text.DecimalFormat;
import java.util.List;
import java.util.Locale;

/**
* Created by roberthdudiver on 8/2/17.
*/

public class ProductosAdapter extends BaseAdapter implements ListAdapter {
private JSONArray jsonArray;
private Context context;

public ProductosAdapter( JSONArray jsonArray, Context con) {

assert jsonArray != null;
context=con;
this.jsonArray = jsonArray;

}


@Override public int getCount() {
if(null==jsonArray)
return 0;
else
return jsonArray.length();
}

@Override public JSONObject getItem(int position) {
if(null==jsonArray) return null;
else
return jsonArray.optJSONObject(position);
}

@Override public long getItemId(int position) {
JSONObject jsonObject = getItem(position);

return jsonObject.optLong("id");
}

JSONObject json_data ;
View ConvertView;
static class ViewHolder {
ImageView img;
TextView text;
TextView desc;
TextView cantidad;
TextView precio;
int posicion=1;
ScrollView mScrollView;
SeekBar seekBar;
float preciofl;
Button Botonincrementar;
Button Botondecrementar;
ImageButton Boton;

}
private static final String TAG = "CustomAdapter";
ViewHolder Holder;
@Override public View getView(int position, View convertView, ViewGroup parent) {
ConvertView=convertView;
LayoutInflater inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

Log.v(TAG, "in getView for position " + position + ", convertView is "
+ ((convertView == null) ? "null" : "being recycled"));

if (ConvertView == null) {




ConvertView = inflater.inflate(R.layout.lista_productos, parent, false);
Holder = new ViewHolder();
//inflater.inflate(R.layout.lista_productos, null);

Holder.desc = (TextView) ConvertView.findViewById(R.id.titulo);
Holder.cantidad = (TextView) ConvertView.findViewById(R.id.txtcantidad);
Holder.Boton = (ImageButton) ConvertView.findViewById(R.id.botonagregar);
Holder.text = (TextView) ConvertView.findViewById(R.id.h1);
Holder.precio = (TextView) ConvertView.findViewById(R.id.precio);
Holder.img = (ImageView) ConvertView.findViewById(R.id.img);
Holder.seekBar = (SeekBar) ConvertView.findViewById(R.id.barra);
Holder.Botonincrementar =(Button) ConvertView.findViewById(R.id.increment);
Holder.Botondecrementar =(Button) ConvertView.findViewById(R.id.decrement);

ConvertView.setTag(Holder);
}
else {
Holder = (ViewHolder) ConvertView.getTag();
}

Holder.seekBar.setMax(10);
Holder.Boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder es = (ViewHolder)v.getTag();
ObjetoProductoPcarrito Obj = new ObjetoProductoPcarrito();
Obj.nombre=es.text.getText().toString();
Obj.cantidad= Float.parseFloat(es.cantidad.getText().toString());
Obj.precio=es.preciofl;
if( Obj.cantidad>0) {
Utilidades.ListaActual().add(Obj);
}
TextView infocarrito= (TextView)Utilidades.ContextoPrincipalCarrito.findViewById(R.id.precio);
String tot=String.valueOf(Utilidades.TotalCarrito());
infocarrito.setText( tot+" Bs.");
es.cantidad.setText("1");
es.seekBar.setProgress(1);
es.posicion=1;


}
});

JSONObject json_data1 = getItem(position);

Holder.Botondecrementar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder es = (ViewHolder)v.getTag();
int nume=Integer.parseInt(es.cantidad.getText().toString());

if(nume>=2) {
nume--;
es.cantidad.setText(String.valueOf(nume));

}
}
});
Holder.Botonincrementar.setOnClickListener(Incrementarlistener);
Holder.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

ViewHolder es = (ViewHolder)seekBar.getTag();
try {
es.posicion=i;
es.cantidad.setText(Integer.toString(i));
}catch (Exception e){

Log.e("Error", "unexpected JSON exception", e);

}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

if(null!=json_data1 ) {
try {

String jj = json_data1.getString("id");

// try parse the string to a JSON object
try {

String id = json_data1.getString("id");
String description = json_data1.getString("description");
String name = json_data1.getString("name");
String imagen = json_data1.getString("product_images");
String preciop = json_data1.getString("product_price");
float litersOfPetrol = Float.parseFloat(preciop);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);


preciop = df.format(litersOfPetrol);


try {
Holder.img.setTag("img-" + id);
Holder.text.setTag("text-" + id);
Holder.cantidad.setTag("cantidad-" + id);
Holder.seekBar.setTag(Holder);
Holder.seekBar.setProgress(Holder.posicion);
Holder.precio.setTag("precio-" + id);
Holder.Botonincrementar.setTag(Holder);
Holder.Botondecrementar.setTag(Holder);
Holder.Boton.setTag(Holder);

} catch (Exception e) {
Log.e("Error", "unexpected JSON exception", e);
}

Holder.text.setText(name);
Holder.desc.setText(Utilidades.LimpiarHtml(description));
Holder.text.setText(name);
Holder.preciofl = Float.parseFloat(preciop.replace(',', '.'));
Holder.precio.setText(preciop + " Bs.");
Holder.desc.setMovementMethod(new ScrollingMovementMethod());

System.out.println("Position ["+position+"]");

// String imagen="http://"+ Utilidades.Url()+"/img/p/"+idimagen+"/"+idimagen+"-medium_default.jpg";
// Picasso.with(convertView.getContext()).load(imagen).into(img);
int es = R.drawable.precarga;


Picasso.with(ConvertView.getContext())
.load(imagen)
.placeholder(es)
.into(Holder.img);


} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}


} catch (JSONException e) {

// Log.e("MYAPP", "unexpected JSON exception", e);
// Do something to recover ... or kill the app.
}

}

return ConvertView;
}



private View.OnClickListener Incrementarlistener = new View.OnClickListener()
{

@Override
public void onClick(View v) {
ViewHolder es = (ViewHolder)v.getTag();



int nume=Integer.parseInt(es.cantidad.getText().toString());

if(nume<=99) {
nume++;
es.cantidad.setText(String.valueOf(nume));

}
}
};
}
Reply all
Reply to author
Forward
0 new messages