2014-06-18 2 views
1

Я на самом деле столкнулись с проблемой, что я не знаю, как решить ...OnItemClick и пункт вид

На самом деле, я хочу, чтобы изменить цвет и отобразить изображение на ListView, когда я нажимаю на него.

Проблема заключается в том, что я нажимаю на свой первый элемент, 0-й, 9-й, 18-й и т. Д. ... тоже меняет ... это похоже на то, что View onItemClick принимает только видимую часть списка (отображаемый элемент, без прокрутки)

Я не знаю, как его решить.

Мой адаптер:

public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 

      convertView = mInflater 
        .inflate(R.layout.item_anomalies, null); 

      holder = new ViewHolder(); 

      holder.txtTitre = (TextView) convertView 
        .findViewById(R.id.titre); 

      holder.img = (ImageView) convertView 
        .findViewById(R.id.img); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     final AnomalieRowItem rowItem = (AnomalieRowItem) getItem(position); 

     holder.txtTitre.setText(rowItem.getLibelle()); 

     if (position % 5 == 0) { 
      holder.img.setBackgroundColor(0xffED695A); 
     } else { 
      if (position % 4 == 0) { 
       holder.img.setBackgroundColor(0xffEB5443); 
      } else { 
       if (position % 3 == 0) { 
        holder.img.setBackgroundColor(0xffEA4735); 
       } else { 
        if (position % 2 == 0) { 
         holder.img.setBackgroundColor(0xffE93825); 
        } else { 
         holder.img.setBackgroundColor(0xffD52815); 
        } 
       } 
      } 
     } 

     return convertView; 
    } 

Мой слушатель:

private void initListener() { 
     m_ListeAnomalie.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       AnomalieRowItem item = m_ListeItem.get(position); 

       ImageView imgCheck = (ImageView) view.findViewById(R.id.check); 
       LinearLayout layout = (LinearLayout) view.findViewById(R.id.item); 

       if (item.isChecked()) { 
        layout.setBackgroundColor(0xffefefef); 
        item.setChecked(false); 
        imgCheck.setVisibility(View.GONE); 
       } else { 
        layout.setBackgroundColor(0xffdddddd); 
        item.setChecked(true); 
        imgCheck.setVisibility(View.VISIBLE); 
       } 

       m_Adapter.notifyDataSetChanged(); 
      } 
     }); 

     m_Valider.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       end(); 
      } 
     }); 
    } 

Спасибо за вашу помощь

EDIT: Часть с по модулю и фона работает отлично, моя проблема заключается в слушателя, это похоже на неправильное представление, которое вводится в функцию OnItemClick.

EDIT 2: С рисунком, это лучше, я думаю

Android problem when OnItemClick

+0

Не могли бы вы уточнить подробности? я не понял, в чем ваша проблема и чего вы хотите достичь. –

+0

Я редактировал свой пост – mfrachet

+0

Я проверил ваш код .. В этом случае вы используете ImageView вместо флажка. 2nd thing onItemНажмите, что вы получаете предмет класса. item.isChecked(), в котором вы получите старое значение, а не новое. –

ответ

1
if (position % 5 == 0) { 
      holder.img.setBackgroundColor(0xffED695A); 
     } else { 
      if (position % 4 == 0) { 
       holder.img.setBackgroundColor(0xffEB5443); 
      } else { 
       if (position % 3 == 0) { 
        holder.img.setBackgroundColor(0xffEA4735); 
       } else { 
        if (position % 2 == 0) { 
         holder.img.setBackgroundColor(0xffE93825); 
        } else { 
         holder.img.setBackgroundColor(0xffD52815); 
        } 
       } 
      } 
     } 
// add this lines in getView() after above logic. 
if (rowItem.isChecked()) { 
        layout.setBackgroundColor(0xffefefef); 
        imgCheck.setVisibility(View.GONE); 
       } else { 
        layout.setBackgroundColor(0xffdddddd); 
        imgCheck.setVisibility(View.VISIBLE); 
       } 
0

Вы не используете rowItem.isChecked() в GetView.

+0

Потому что мне это не нужно: o. Я использую его для активности, где я меняю цвет фона. Правильно ли вводить слушателей в адаптер? – mfrachet

+0

Конечно, вам это нужно. – greenapps

Смежные вопросы