我有大约12张CardView。每个设置ImageView在GONE的可见性取决于“高”变量是真还是假,但是当我向下滚动然后向上滚动一些ImageView小部件消失时我不得不提到最后一个ImageView也没有显示。
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Currency currency = currencies.get(i);
Double valor_actual = currencies.get(i).getValores().get(0);
Double valor_anterior = currencies.get(i).getValores().get(1);
viewHolder.textValue.setText(valor_actual.toString());
BigDecimal bigDecimal = null;
if (currency.getHigh()) {
bigDecimal = new BigDecimal(valor_actual).subtract(new BigDecimal(valor_anterior));
viewHolder.textInfo.setTextColor(Color.parseColor("#ff669900"));
// doesn't work properly
viewHolder.imageDown.setVisibility(View.GONE);
}
if (!currency.getHigh()){
bigDecimal = new BigDecimal(valor_anterior).subtract(new BigDecimal(valor_actual));
viewHolder.textInfo.setTextColor(Color.parseColor("#ffcc0000"));
// doesn't work properly
viewHolder.imageUp.setVisibility(View.GONE);
}
String unidad_medida = currency.getUnidad_medida();
if (bigDecimal != null) {
try {
StringBuilder sb = new StringBuilder(currencyFormat(bigDecimal));
if (unidad_medida.equalsIgnoreCase("porcentaje")) {
sb.deleteCharAt(0);
sb.insert(0, "%");
}
viewHolder.textInfo.setText(sb.toString());
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
}
viewHolder.textName.setText(currency.getNombre());
}
这里效果很好
但是当我向下滚动向后滚动时,第三个CardView没有显示ImageView:
答案 0 :(得分:3)
你还需要将Visible置于其他状态。如果您在运行时设置了它们的可见性,请为列表中的每个项目执行此操作。
if (currency.getHigh()) {
bigDecimal = new BigDecimal(valor_actual).subtract(new BigDecimal(valor_anterior));
viewHolder.textInfo.setTextColor(Color.parseColor("#ff669900"));
// doesn't work properly
viewHolder.imageDown.setVisibility(View.GONE);
viewHolder.imageUp.setVisibility(View.VISIBLE);
}
else {
bigDecimal = new BigDecimal(valor_anterior).subtract(new BigDecimal(valor_actual));
viewHolder.textInfo.setTextColor(Color.parseColor("#ffcc0000"));
// doesn't work properly
viewHolder.imageDown.setVisibility(View.VISIBLE);
viewHolder.imageUp.setVisibility(View.GONE);
}
答案 1 :(得分:1)
当您滚动时,可以重复使用用于在位置0显示项目的相同视图来显示位置上的项目,例如,如果位置0处的项目不再可见,则显示该项目(这样,循环视图可以避免使用新视图创建已创建但不可见的视图。)
因此,让我们考虑一下我们最终在视图上没有图像的情况。
位置0的项目应显示图标,位置5的项目应显示图标。当你滚动recyclerview重用为pos 0创建的视图来显示在pos 5的视图。所以基本上你最终调用viewHolder.imageUp.setVisibility(View.GONE)和viewHolder.imageDown.setVisibility(View.GONE);在同一个视图上。
解决方案是操纵其他视图的可见性,如:
viewHolder.imageUp.setVisibility(View.GONE);
viewHolder.imageDown.setVisibility(View.VISIBLE);
答案 2 :(得分:0)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Currency currency = currencies.get(i);
Double valor_actual = currencies.get(i).getValores().get(0);
Double valor_anterior = currencies.get(i).getValores().get(1);
viewHolder.textValue.setText(valor_actual.toString());
BigDecimal bigDecimal = null;
if (currency.getHigh()) {
bigDecimal = new BigDecimal(valor_actual).subtract(new BigDecimal(valor_anterior));
viewHolder.textInfo.setTextColor(Color.parseColor("#ff669900"));
viewHolder.imageDown.setVisibility(View.GONE);
viewHolder.imageUp.setVisibility(View.VISIBLE);
} else {
bigDecimal = new BigDecimal(valor_anterior).subtract(new BigDecimal(valor_actual));
viewHolder.textInfo.setTextColor(Color.parseColor("#ffcc0000"));
viewHolder.imageUp.setVisibility(View.GONE);
viewHolder.imageDown.setVisibility(View.VISIBLE);
}
String unidad_medida = currency.getUnidad_medida();
if (bigDecimal != null) {
try {
StringBuilder sb = new StringBuilder(currencyFormat(bigDecimal));
if (unidad_medida.equalsIgnoreCase("porcentaje")) {
sb.deleteCharAt(0);
sb.insert(0, "%");
}
viewHolder.textInfo.setText(sb.toString());
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
}
viewHolder.textName.setText(currency.getNombre());
}
答案 3 :(得分:0)
RecyclerView小部件。
RecyclerView使用可能是imageview或textview的可重用视图
最好将BaseAdapter用于小型数据集
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html