Android 不在recyclerView中工作的项目的可见性
我有大约12张名片。每一个都将ImageView的可见性设置为GONE,这取决于“high”变量是真是假,但当我向下滚动然后向上滚动时,一些ImageView小部件消失了,我必须指出最后一个ImageView也没有显示Android 不在recyclerView中工作的项目的可见性,android,android-recyclerview,Android,Android Recyclerview,我有大约12张名片。每一个都将ImageView的可见性设置为GONE,这取决于“high”变量是真是假,但当我向下滚动然后向上滚动时,一些ImageView小部件消失了,我必须指出最后一个ImageView也没有显示 @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { Currency currency = currencies.get(i); Double va
@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:
您还需要在else条件下设置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);
}
您还需要在else条件下设置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);
}
当数据集合的元素在运行时根据用户操作或网络事件发生更改时,可使用RecyclerView小部件 RecyclerView使用可重用的视图,可以是imageview或textview 因此,最好对小数据集使用BaseAdapter
当数据集合的元素在运行时根据用户操作或网络事件发生变化时,可使用RecyclerView小部件 RecyclerView使用可重用的视图,可以是imageview或textview 因此,最好对小数据集使用BaseAdapter
当您滚动时,用于在位置0显示项目的同一视图可以重新用于在位置5显示项目,例如,如果位置0的项目不再可见(这样,循环视图通过使用已创建但不可见的视图避免创建新视图)
所以让我们考虑一个场景,当我们最终看不到图像时,
位置0处的项目应显示向上图标,位置5处的项目应显示向下图标。当您滚动时,recyclerview将重用为pos 0创建的视图,以显示pos 5的视图。因此,基本上您最终会调用viewHolder.imageUp.setVisibility(View.go)和viewHolder.imageDown.setVisibility(View.go);同样的观点 解决方案是操纵其他视图的可见性,如:viewHolder.imageUp.setVisibility(View.GONE);
viewHolder.imageDown.setVisibility(View.VISIBLE);
当您滚动时,用于在位置0处显示项目的同一视图可能会重新用于在位置5上显示项目,例如,如果位置0处的项目不再可见(这样,循环视图通过使用已创建但不可见的视图避免创建新视图)
所以让我们考虑一个场景,当我们最终看不到图像时,
位置0处的项目应显示向上图标,位置5处的项目应显示向下图标。当您滚动时,recyclerview将重用为pos 0创建的视图,以显示pos 5的视图。因此,基本上您最终会调用viewHolder.imageUp.setVisibility(View.go)和viewHolder.imageDown.setVisibility(View.go);同样的观点 解决方案是操纵其他视图的可见性,如:viewHolder.imageUp.setVisibility(View.GONE);
viewHolder.imageDown.setVisibility(View.VISIBLE);