Ich versuche dynamisch Textview zu implementieren, in meiner Ansicht Halter, auf der ersten Bildlauf alles geht gut, die Karten und so sind die Eigenschaften für jeden, aber wenn ich zurück scrollen wieder fängt die Textansicht an zu knallen, wo sie nicht sollte.Hinzufügen von dynamischen Textansichten zu RecyclerView ViewHolder verwirren die Ansichten
meinen benutzerdefinierten Adapter:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
public interface OnItemClickListener {
void onItemClick(MyProduct product);
}
int counter = 0;
private OnItemClickListener listener;
private Context context;
List<MyProduct> myProducts;
public CustomAdapter(OnItemClickListener listener, List<MyProduct> myProducts, Context context)
{
super();
this.listener = listener;
this.myProducts = myProducts;
this.context = context;
}
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.product_list, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
if(myProducts != null) {
holder.bind(myProducts.get(position), listener);
counter++;
}
}
@Override
public int getItemCount() {
return myProducts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
//Views
public ImageView imageView;
public TextView textViewProductTitle;
public TextView textViewProductDescription;
public TextView textViewProductSerialNumber;
public TextView textViewProductPrice;
List<TextView> textViews;
ViewGroup viewGroup;
//Initializing Views
public ViewHolder(View itemView) {
super(itemView);
viewGroup = (ViewGroup)itemView.findViewById(R.id.linearCatalog);
textViews = new LinkedList<>();
imageView = (ImageView) itemView.findViewById(R.id.thumbnail);
textViewProductTitle = (TextView) itemView.findViewById(R.id.textViewProductTitle);
textViewProductDescription = (TextView) itemView.findViewById(R.id.textViewProductDescription);
textViewProductSerialNumber = (TextView) itemView.findViewById(R.id.textViewProductSerialNumber);
textViewProductPrice = (TextView) itemView.findViewById(R.id.textViewProductPrice);
}
public void bind(final MyProduct item, final OnItemClickListener listener) {
Glide.with(context).load(item.getProductImage())
/*.asBitmap().format(DecodeFormat.PREFER_ARGB_8888).*/
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
textViewProductTitle.setText(item.getProductTitle());
textViewProductDescription.setText(item.getProductDescription());
textViewProductSerialNumber.setText(item.getProductSn());
textViewProductPrice.setText(item.getProductPrice());
if(counter< myProducts.size())
{
for (int i = 0; i < item.getBranchCounter(); i++) {
TextView textView = new TextView(context);
textView.setText(item.getAddressList().get(i));
textViews.add(textView);
viewGroup.addView(textView);
}
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
irgendwelche Ratschläge wäre hilfreich, ty!
Ok ich sah den Trick mit GONE und VISIBLE, aber das sind, wenn Sie wissen, wieviele textview Sie benötigen, ich brauche von 1-5 hängt das Element. Schalter() ? – 2Stoned
Dann wirst du Schmerzen haben. Aber ich würde immer noch nicht empfehlen, die Textansichten dynamisch hinzuzufügen - Sie spielen besser mit den Sichtbarkeiten aller 5 oder mit verschiedenen Ansichtsarten. Die Alternative wäre das dynamische Entfernen und Hinzufügen von Bindungen, was einige der Vorteile der Recycler-Ansicht kosten würde und ein Ärger für den Code wäre. –
Ok Herr, Schalter() von 1-5 :) TY !!! – 2Stoned