2014-12-03 3 views
0

У меня есть список вопросов в этом списке, есть 4 вопроса, 3 ложных и 1 истины. Я создал Bean для управления этими вопросами, у компонента есть значение атрибута, этот атрибут получает 1 или 0, 1 до true и 0 - false.Картина ListView с правильным ответом?

Когда пользователь нажимает на вопрос в ListView, я хочу проверить, имеет ли вопрос значение = 1 или значение = 0, если значение = 0 Я хочу нарисовать все значение = 0 с красным цветом и если значение = 1 краска с цветом зеленый, показывая, что вопрос верен!

Как я могу это сделать?

Здесь, как я пытаюсь.

//bean 
public class Bean{ 
    private int value; 
    //get and sets 
} 


//activity 
List<Bean> answers = new ArrayList<Bean>(); 
ListView listView = (ListView)findViewById(R.id.answers_listview); 
listView.setAdapter(new BeanListAdapter(context, answers)); 


//ListAdapter 
public class BeanListAdapter extends BaseAdapter { 
    private List<Bean> lista; 
    private Context context;  

    public BeanListAdapter(Context context, List<Bean> lista){ 
     this.context = context; 
     this.lista = lista;   
    } 

    @Override 
    public int getCount() { 
     return lista.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return lista.get(position); 
    } 

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

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     Bean item = lista.get(position); 
     View layout; 
     if(view == null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      layout = inflater.inflate(R.layout.alternativa_list_adapter, parent, false);    
     }else{ 
      layout = view; 
     } 
     LinearLayout llAlternativa = (LinearLayout) layout.findViewById(R.id.llAlternativa); 
     TextView tvAlternativa = (TextView) layout.findViewById(R.id.tvAlternativa); 

     if(item.getValue() >= 1){ 
      llAlternativa.setBackgroundColor(Color.parseColor("#529c03")); 
      tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
     }else{   
      llAlternativa.setBackgroundColor(Color.parseColor("#d74b3f")); 
      tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
     } 


     tvAlternativa.setText(item.getTexto());   

     return layout; 
    } 

} 


@Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Bean answer = listAnswers.get(position); 
      LinearLayout llAlternativa = (LinearLayout) getView().findViewById(R.id.llAlternativa); 
      TextView tvAlternativa = (TextView) getView().findViewById(R.id.tvAlternativa); 
      if(answer.getValor() == 1){ 
       //green 
       llAlternativa.setBackgroundColor(Color.parseColor("#529c03")); 
       tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
      }else{ 
       //red 
       for(Bean x : listAnswers){ 
        if(x.getValor() == 0){      
         llAlternativa.setBackgroundColor(Color.parseColor("#d74b3f")); 
         tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
        } 
       }    
      } 


    } 
+0

ли нужно сделать пользователь клики? Где этот метод onClick? Потому что из вашего метода getView, я думаю, цвет фона уже установлен без какого-либо взаимодействия с пользователем. Или мне что-то не хватает? – Wicked161089

+0

yep, пользователю нужен щелчок. Когда пользователь нажимает: 'public void onItemClick (AdapterView parent, View view, int position, long id)' фон изменяется красным или зеленым в зависимости от значения 1 или 0 – FernandoPaiva

+0

Тогда я не понимаю, что вы подразумеваете под этим : «но когда я нажимаю в опции, ListView не рисует строки с цветами». – Wicked161089

ответ

1

Я бы окружить, если другое заявление (изменить цвет) в вашем методе GetView с другой, если заявление (if (userHasChosen)). Затем в onItemClick Метод изменений булевых userHasChosen истины и уведомить адаптер (adapter.notifyDataSetChanged();)

if(userHasChosen){  // GETVIEW  
    if(item.getValue() >= 1){ 
     llAlternativa.setBackgroundColor(Color.parseColor("#529c03")); 
     tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
    }else{   
     llAlternativa.setBackgroundColor(Color.parseColor("#d74b3f")); 
     tvAlternativa.setTextColor(Color.parseColor("#FFFFFF")); 
    } 
} 

И в вашем onItemClick:

userHasChosen = true; 
    adapter.notifyDataSetChanged(); 
Смежные вопросы