Android SeekBar - удалить потерянный фокус - PullRequest
1 голос
/ 20 февраля 2012

Я создаю простое приложение, которое отображает сетку с меню в верхней части. Одна из кнопок меню при нажатии помещает панель поиска в представление прямо под ней. Затем пользователь может переместить ползунок, чтобы изменить размер элементов в виде сетки. Я могу справиться с этой частью очень хорошо, проблема возникает при попытке избавиться от панели поиска. Мне нужен способ узнать, когда панель поиска потеряла фокус. Я пытался использовать setOnFocusChangeListener, но он никогда не вызывается. Часть кода ниже

public class MainActivity extends Activity implements OnFocusChangeListener {
    SeekBar seek;

    public boolean onOptionItemSelected(MenuItem item) {
        if(item.getId() == R.id.menu_grid_size)
        {
            if(seek != null) {
                seek = new SeekBar(this);
                seek.setOnFocusChangeListener(this);
                ...
                layout.addView(seek, layoutparams);
            } else {
                layout.removeView(seek);
                seek = null;
            }
        }
    }

    public void onFocusChange(Viewv, boolean hasFocus) {
        layout.removeView(seek);
    }

}

Все работает, кроме тех случаев, когда я прокручиваю список, панель поиска все еще видна. Возможно, это не лучший способ сделать то, что я хочу, любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: я изменил код выше, чтобы исправить ошибку, которую я получил, когда вы дважды нажимаете кнопку.

1 Ответ

1 голос
/ 22 февраля 2012

Так что я думаю, что нашел решение, которое, я думаю, работает довольно хорошо. Поскольку я использую панель поиска, я использую метод onStopTrackingTouch (), чтобы выяснить, когда пользователь поднимает палец, и использовать его в качестве индикатора того, когда убирать слайдер.

public void onStopTrackingTouch(SeekBar seekBar) {
    if(seekBar != null){
        layout.removeView(seekBar);
        seekBar = null;
}
...