2017-09-13 4 views
0

Parce qu'il répète le compteur de produit qui est un TextView; J'ai le scénario suivant:Parce que le compteur de produit textview est répété dans la vue grille en utilisant BaseAdapter

  1. L'utilisateur sélectionne le produit et applique la quantité.
  2. À partir de l'activité et non de l'adaptateur, j'affiche la quantité du produit sélectionné comme indiqué sur l'image.
  3. Tout fonctionne parfaitement, jusque sous l'écran et le compteur passe par magie à un autre produit, je l'ai mis en œuvre ces méthodes par la suggestion:

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

et encore je encore cette erreur. J'ai également essayé de modifier le compteur de l'adaptateur, mais la même chose se produit. Je veux que ce compteur reste fixe et ne mette pas à jour lorsqu'il est sous l'écran.

Adaptateur:

public class ProductoAdapter extends BaseAdapter 
    { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private ArrayList<Producto> listadoProductos; 
    private ArrayList<Producto> productosPedidos; 

    Producto producto; 

    Empresas pedido; 

    public final int TYPE_NOTICIA=0; 
    public final int TYPE_LOAD=1; 
    private gestionSharedPreferences sharedPreferences; 
    private Context context; 
/* 
    OnLoadMoreListener loadMoreListener; 
*/ 
    boolean isLoading=false, isMoreDataAvailable=true; 
    vars vars; 
    public static int contador; 

    public static int i; 
    public static int contadorGeneral; 
    private NumberFormat numberFormat; 
    ImageLoader imageLoader = ControllerSingleton.getInstance().getImageLoader(); 

    public ProductoAdapter(Activity activity, ArrayList<Producto> listadoProductos) 
    { 
     this.activity=activity; 
     this.listadoProductos=listadoProductos; 
     productosPedidos=new ArrayList<Producto>(); 
     vars=new vars(); 
     sharedPreferences=new gestionSharedPreferences(this.activity); 
     contador=0; 
     contadorGeneral=0; 
     producto=new Producto(); 

     /* LocalBroadcastManager.getInstance(context).registerReceiver(mMessageReceiver, 
       new IntentFilter("custom-message"));*/ 
    } 

    /* public BroadcastReceiver mMessageReceiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      // Get extra data included in the Intent 
      producto = (Producto) intent.getSerializableExtra("producto"); 
      Toast.makeText(context, producto.getNombreProducto()+producto.getNumeroDeProducto() ,Toast.LENGTH_SHORT).show(); 
     } 
    };*/ 


    @Override 
    public int getCount() 
    { 
     return listadoProductos.size(); 
    } 

    @Override 
    public Producto getItem(int position) 
    { 
     return listadoProductos.get(position); 
    } 

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

    @Override 
    public int getItemViewType(int position) 
    { 
     return position; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) 
    { 
     numberFormat = NumberFormat.getNumberInstance(Locale.GERMAN); 

     if (view == null) 
     { 
      LayoutInflater inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.producto_row_layout, viewGroup, false); 

      Log.i("martin","null"); 
     } 
     else 
     { 
      Log.i("martin","llenoooooooooo"); 
     } 
     final Producto producto = getItem(position); 

     ImageView imagenProducto = (ImageView) view.findViewById(R.id.imagenProducto); 

     TextView nombreProducto = (TextView) view.findViewById(R.id.nombreProducto); 
     TextView cantidadProducto = (TextView) view.findViewById(R.id.cantidadProducto); 
     TextView precioGeneralProducto = (TextView) view.findViewById(R.id.precioGeneralProducto); 
     TextView precioPideProducto = (TextView) view.findViewById(R.id.precioPideProducto); 
     TextView ahorroProducto = (TextView) view.findViewById(R.id.ahorroProducto); 



     if (producto.getImagenProducto().toString().equals("http://fasttrackcenter.com/pide/app/")) 
     { 
      imagenProducto.setImageResource(R.drawable.ic_not_image_found); 
     } 

     else 
     { 
      Glide.with(activity). 
        load(producto.getImagenProducto().toString()). 
        thumbnail(0.5f).into(imagenProducto); 
     } 

     nombreProducto.setText(producto.getNombreProducto()+" x "+producto.getCantidadProducto()+" "+producto.getUnidadProducto()); 

     //cantidadProducto.setText(producto.getCantidadProducto()); 
     precioGeneralProducto.setText("$"+numberFormat.format(Double.parseDouble(producto.getPrecioGeneralProducto()))); 
     precioGeneralProducto.setPaintFlags(precioGeneralProducto.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG); 
     precioPideProducto.setText("$"+numberFormat.format(Double.parseDouble(producto.getPrecioPideProducto()))); 
     int valorahorro=(Integer.parseInt(producto.getPrecioGeneralProducto()))-(Integer.parseInt(producto.getPrecioPideProducto())); 
     ahorroProducto.setText(""+"$"+numberFormat.format(Double.parseDouble(""+valorahorro))); 

     return view; 
    } 

} 

Activité:

J'utilise un TextView comme un compteur qui est d'abord invisible, mais quand il est sélectionné, il est visible avec la quantité de produit sélectionné.

de l'activité que j'utilise cette méthode:

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
    { 
     Producto producto = (Producto) parent.getItemAtPosition(position); 

     final View contadorImagenProductoBolsa = Pedidos.this.findViewById(R.id.contadorProductoImagenBolsa); 
     TextView test1TextView = (TextView) view.findViewById(R.id.contadorProductoImagenBolsa); 


     mostrarDialogoDetalle(test1TextView,position,producto.getIdProducto(),producto.getImagenProducto(), producto.getNombreProducto(), 
       producto.getCantidadProducto(),producto.getUnidadProducto(), producto.getPrecioGeneralProducto(),producto.getPrecioPideProducto(), 
       producto.getAhorroProducto()); 

    } 

Quelqu'un at-il eu ce lieu? comment l'ont-ils résolu?

enter image description here

Ici, il est parfait, mais quand je vais sous l'écran et je revenir en arrière et en haut, voir comment le compteur arrive à un autre produit inexplicablement:

enter image description here

Je veux une une aide efficace et un extrait possible si c'est le cas d'un adaptateur ou d'une activité incorrecte.

Merci.

+0

vous devez stocker cette position particulière quand il clique sur .so pendant que vous faites défiler ou déplacer cette position afficher uniquement du texte. Cela arrive à cause de votre liste de contrôle est la cellule de réutilisation. –

Répondre

0

Je pense que vous devez ajouter ViewHolder Pour ProductoAdapter comme:

class ViewHolder 
{ 
     TextView nombreProducto,cantidadProducto 
     ,precioGeneralProducto,precioPideProducto,ahorroProducto; 
     ImageView imagenProducto; 

public ViewHolder(View view){ 

    imagenProducto = (ImageView) view.findViewById(R.id.imagenProducto); 
    nombreProducto = (TextView) view.findViewById(R.id.nombreProducto); 
    cantidadProducto = (TextView) view.findViewById(R.id.cantidadProducto); 
    precioGeneralProducto = (TextView) view.findViewById(R.id.precioGeneralProducto); 
    precioPideProducto = (TextView) view.findViewById(R.id.precioPideProducto); 
    ahorroProducto = (TextView) view.findViewById(R.id.ahorroProducto); 


} 
} 

Utilisez setTag et getTag Pour ViewHolder Comme:

ViewHolder holder; 
    if (view == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.producto_row_layout, viewGroup, false); 
     holder = new ViewHolder(); 
     Log.i("martin","null"); 
    } 
    else 
    { holder = (ViewHolder) view.getTag(); 
     Log.i("martin","llenoooooooooo"); 
    } 

    final Producto producto = getItem(position); 
    if (producto.getImagenProducto().toString().equals("http://fasttrackcenter.com/pide/app/")) 
    { 
     holder.imagenProducto.setImageResource(R.drawable.ic_not_image_found); 
    } 

    else 
    { 
     Glide.with(activity). 
       load(producto.getImagenProducto().toString()). 
       thumbnail(0.5f).into(holder.imagenProducto); 
    } 

    holder.nombreProducto.setText(producto.getNombreProducto()+" x "+producto.getCantidadProducto()+" "+producto.getUnidadProducto()); 
    . 
    . 
    . 
view.setTag(holder); 
    return view; 

J'espère que cela est vous aider

+0

Ne fonctionne pas, il ne cesse de répéter..Aide! – FABiO