onBindHolder chiamato più volte come Recycler View ha bisogno di una vista a meno nuovo. Pertanto, ogni volta che si imposta visilibity nelle viste secondarie, anche gli altri stati di visualizzazione cambiano.
Ogni volta che si scorre su e giù, queste visualizzazioni vengono ridisegnate con opzioni di visibilità errate, quindi specificare sempre entrambe le condizioni perché la vista del riciclatore non conosce lo stato/le condizioni/i valori precedenti dei nostri widget.
Soluzione:
In caso di blocco Se si imposta la visibilità di qualsiasi widget.setVisibility Android (View.Gone) poi nel blocco else è necessario impostare E 'la visibilità di fronte vwith widget.setVisibility (View.Visible) da superare il problema precedente
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.tvName.setText(ModelCategoryProducts.name.get(i));
viewHolder.tvPrice.setText("Rs."+String.format("%.2f", Float.parseFloat(ModelCategoryProducts.price.get(i))));
if(ModelCategoryProducts.special_price.get(i).equals("null")) {
viewHolder.tvSpecialPrice.setVisibility(View.GONE); // here visibility is gone and in else it's opposite visibility i set.
viewHolder.tvPrice.setTextColor(Color.parseColor("#ff0000"));
viewHolder.tvPrice.setPaintFlags(0);// here paint flag is 0 and in else it's opposite flag that i want is set.
}else if(!ModelCategoryProducts.special_price.get(i).equals("null")){
viewHolder.tvPrice.setTextColor(Color.parseColor("#E0E0E0"));
viewHolder.tvSpecialPrice.setVisibility(View.VISIBLE);
viewHolder.tvSpecialPrice.setText("Rs." + String.format("%.2f", Float.parseFloat(ModelCategoryProducts.special_price.get(i))));
viewHolder.tvPrice.setPaintFlags(viewHolder.tvPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
if (!ModelCategoryProducts.image_url.get(i).isEmpty()) {
Picasso.with(context)
.load(ModelCategoryProducts.image_url.get(i))
.into(viewHolder.ivProduct);
}
viewHolder.setClickListener(new ItemClickListener() {
@Override
public void onClick(View view, int position, boolean isLongClick) {
if (isLongClick) {
// Toast.makeText(context, "#" + position + " - " + ModelCategoryProducts.name.get(position) + " (Long click)", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "#" + position + " - " + ModelCategoryProducts.name.get(position), Toast.LENGTH_SHORT).show();
Intent i = new Intent(context, ProductDetail.class);
i.putExtra("position",position);
i.putExtra("flagHlvCheck", 5);
context.startActivity(i);
}
}
});
}
fonte
2015-12-11 06:41:19
Ti suggerisco di scrivere componenti di visualizzazione personalizzati. La visibilità delle impostazioni non è una buona implementazione. Il tuo progetto è su Git? Quindi posso creare una richiesta di pull ad esso dostum;)? –
Ti suggerisco caldamente * refactoring * il tuo codice prima di continuare. È estremamente difficile da seguire e hai VIE di molti punti di vista. Dovresti essere in grado di crearne molti in modo dinamico per ridurre il codice. Credo davvero che i problemi riguardino 'onBindViewHolder'. –
@ EmreAktürk Sfortunatamente non è sul fatto che ha alcuni servizi web speciali dalla mia università. Cosa posso implementare con la visualizzazione personalizzata, non posso realizzare :) Non posso pensare che cosa fare, qualsiasi aiuto sarebbe grande. -JaredBurrows In realtà il servizio Web della visualizzazione è così sporco. Il servizio ha 10 campi Vize e tutti contengono i segni di lezione. Sto cercando di verificare se il campo Vize (mark) non è vuoto dal servizio, quindi mostra la vista testuale. –