2017-11-18 85 views
0

我有大約12個CardViews。每一個設置GONE的ImageView的可見性取決於「高」變量是true還是false,但是當我向下滾動然後向上滾動一些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()); 
    } 

這裏的偉大工程

enter image description here

但是當我向下滾動,回到向上滾動第三CardView不顯示的ImageView:

enter image description here

回答

2

你需要把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); 
} 
+0

它的工作原理!非常感謝:D –

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()); 
} 
0

滾動時,相同的觀點來看可重複使用的這已經被用於在位置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); 
相關問題