Прокрутка через ListView ProgressBars - PullRequest
3 голосов
/ 22 июня 2011

Я работаю над приложением для Android, которое использует ListView, в котором каждая строка состоит из текстового представления и индикатора выполнения. Все работает гладко, если пользователю не нужно прокручивать длинный список.

ProgressBars начинают отслеживать прогресс других ProgressBars, которые в данный момент не видны на экране.

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

GetView:

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

        View row = convertView;
        ViewWrapper wrapper;
        ProgressBar myProgressBar;
        int initProgress = myData.get(position).getProgress();

        if (row == null){
            LayoutInflater inflater = context.getLayoutInflater();
            row = inflater.inflate(R.layout.row, null); 

            wrapper = new ViewWrapper(row);
            row.setTag(wrapper);    
        }

        else{
            wrapper = (ViewWrapper)row.getTag();

        }

        RowModel model = getModel(position);        
        wrapper.getPid().setText(model.toString());
        myProgressBar = wrapper.getProgressBar();
        myProgressBar.setProgress(initProgress);
        myProgressBar.setMax(100);

        myProgressBar.setTag(new Integer(position));

        return row;
    }   

ViewWrapper:

public class ViewWrapper {
    View base;
    TextView pid = null;
    ProgressBar pb= null;

    ViewWrapper(View base){
        this.base = base;
    }

    TextView getPid(){
        if(pid == null){
            pid = (TextView)base.findViewById(R.id.pid);
        }

        return(pid);
    }

    ProgressBar getProgressBar(){
        if(pb== null){
            pb= (ProgressBar)base.findViewById(R.id.progressbar);
        }

        return(pb);
    }
}

Похоже, проблема связана с:

myProgressBar = wrapper.getProgressBar();

потому что этот ProgressBar начинает получать поведение переработанного ProgressBar. Однако я хочу, чтобы оно имело свое поведение.

Какой лучший способ облегчить это? Благодарю.

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Мне пришлось реализовать аналогичную функцию, вот что я сделал. Я реализовал следующее снаружи getview

  • OnTouchListener - для прослушивания событий сенсорной панели поиска
  • OnKeyListener - прослушивание событий dpad и trakball для панели поиска

Я установил эти слушатели для полос поиска с getView

Всякий раз, когда вызывались слушатели, я находил родителя поисковой панели, а затем делал findviewbyid от родителя до текстового представления.

Так что теперь у меня есть текстовое представление, которое я должен обновить, и панель поиска. Все, что мне нужно сделать, это установить текст из массива.

вот код, который вам поможет.

частный OnTouchListener touchListener = новый OnTouchListener () {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
            View parent = (View) v.getParent();
            TextView textView = (TextView) parent
                    .findViewById(R.id.id_grade_tooltip);
            if (textView == null) {
            } else {
                SeekBar seekBar = (SeekBar) v;
                textView.setText(String.valueOf(seekBar.getProgress())
                        + "%");
            }
            return false;
    }
};
0 голосов
/ 22 июня 2011

Возможно, вам придется каждый раз раздувать компоновку и не использовать повторно переданный convertView. Это не должно быть проблемой, если у вас много строк.

...