2016-07-08 4 views
0

У меня есть GridView с объектами realm, я могу заполнить GridView в порядке, то, что я не могу сработать, - это изменить цвет фона элемента в зависимости от переменной объекта realm. Мне нужно, если объект realEventry.VERIFIED равен 1, тогда цвет фона должен быть зеленым.андроид gridview элемент динамический цвет фона

Мне удалось получить его, показывая зеленый цвет, изменив view.setBackgroundColor, но затем, когда я прокручиваю больше элементов, автоматически получаю зеленый фон!

public class StockEntryAdapter extends BaseAdapter { 
private LayoutInflater inflater; 

private List<StockEntry> stockEntries = null; 

public StockEntryAdapter(Context context) { 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public void setData(List<StockEntry> details) { 
    this.stockEntries = details; 
} 

@Override 
public int getCount() { 
    if (stockEntries == null) { 
     return 0; 
    } 
    return stockEntries.size(); 
} 

@Override 
public Object getItem(int position) { 
    if (stockEntries == null || stockEntries.get(position) == null) { 
     return null; 
    } 
    return stockEntries.get(position); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int position, View currentView, ViewGroup parent) { 
    if (currentView == null) { 
     currentView = inflater.inflate(R.layout.stock_entry_listitem, parent, false); 
    } 

    StockEntry stockEntry = stockEntries.get(position); 

    if (stockEntry != null) { 
     TextView textView = (TextView) currentView.findViewById(R.id.itemnmbr); 
     textView.setText(stockEntry.getItemFullName()); 

     if (stockEntry.getVerified() == 1) { 
      // here I need to set the items background colour to green 
     } 
    } 

    return currentView; 
} 

ответ

0

попробовать это

currentView.setBackgroundColor(ContextCompat.getColor(context.R.color.yellow)); 
+0

Кроме того, после вы изменили цвет, что вы хотите, вы должны контролировать другие элементы тоже вы получаете более зеленым цвет, потому что вид перерабатываются так добавить 'else' заявление в код по умолчанию предыстории оригинал. –

+0

Он не использует класс держателя для просмотра, поэтому я не думаю, что вам больше не нужна роль. – comeback4you

+0

comeback4you - это было очень близко к моему исходному коду, я использую currentView.setBackgroundColor (Color.parseColor («# A5D6A7»)); проблема была подчеркнута @EsatIBIS - я не думал о том, что у меня там есть другой фон, который работал, благодаря обоим! – user260582

0

Благодаря как @ comeback4you и @EsatIBIS, это то, что работает для меня;

public View getView(int position, View currentView, ViewGroup parent) { 
    if (currentView == null) { 
     currentView = inflater.inflate(R.layout.stock_entry_listitem, parent, false); 
    } 

    StockEntry stockEntry = stockEntries.get(position); 

    if (stockEntry != null) { 
     TextView textView = (TextView) currentView.findViewById(R.id.itemnmbr); 
     textView.setText(stockEntry.getItemFullName()); 
     if (stockEntry.getVERIFIED() == 1) { 
      currentView.setBackgroundColor(Color.parseColor("#A5D6A7")); 
      if (stockEntry.getVARIANCECOST() > 100 || stockEntry.getVARIANCECOST() < -100) { 
       currentView.setBackgroundColor(Color.parseColor("#EF9A9A")); 
      } 
     } else { 
      currentView.setBackgroundColor(Color.WHITE); 
     } 
    } 

    return currentView; 
} 
Смежные вопросы