2012-02-02 6 views
3

Я пытаюсь использовать BaseAdapter для отображения элемента в ListView. Я пробую под кодом в BaseAdapter.Изменение цвета фона фона при перемещении элемента в ListView

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    //... 
    convertView.setOnTouchListener(new OnTouchListener() { 
@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     v.setBackgroundResource(R.drawable.ic_corner_four_click); 
    break; 

     case MotionEvent.ACTION_UP: 
     v.setBackgroundResource(R.drawable.ic_corner_four); 
    break; 
    } 

    return false; 
    } 
    }); 
} 

В то время как предмет должен быть затронут, он меняет фон на ic_corner_four_click. Но пока отпустите палец или перейдите к другому предмету, он не изменился на ic_corner_four. Как его изменить?

ответ

3

Вы должны использовать StateListDrawable для определения фона в определенном состоянии. See the documentation. Если вы посмотрите направо на вопрос, вы увидите другие очень похожие вопросы. --->

This one, например.

+0

iam using stateListDRawable. но когда мы прокручиваем список, выбор отключается. Зачем? как это исправить? я много искал, и я попробовал «choice_mode_single», но я не смог сохранить выделение. Есть идеи? – AD14

+0

А, это другая проблема. Я думал, тебе просто нужен особый фон при прикосновении. Если вы хотите сделать это, это немного сложнее. Вы должны сохранить позицию выбора в модели и переопределить метод getView() в адаптере, чтобы вызвать 'view.setSelected (true)', если представление выбрано. – dmon

1

Причина этой проблемы - ваша функция onTouch всегда возвращает false. Для ACTION_DOWN выполняется код, и функция возвращает false. Теперь его никогда не вызывают ACTION_UP. Изменить возвращаемое значение на true должно решить вашу проблему.

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