【问题标题】:Scrolling through ListView of ProgressBars滚动ProgressBars的ListView
【发布时间】:2011-09-20 15:49:15
【问题描述】:

我正在开发一个使用 ListView 的 Android 应用程序,其中每一行都由一个文本视图和一个进度条组成。除非用户必须滚动浏览一长串列表,否则一切都会顺利进行。

ProgressBars 开始承担当前在屏幕上不可见的其他 ProgressBars 的进度。

我知道这是一个源于 GetView 实施的常见问题,但我想知道对 ProgressBars 采取的最佳行动方案是什么。

获取视图:

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 的行为。但是,我希望它有自己的行为。

缓解这种情况的最佳方法是什么?谢谢。

【问题讨论】:

    标签: android listview android-arrayadapter android-progressbar


    【解决方案1】:

    我必须实现一个类似的功能,这就是我所做的。我在getview之外实现了以下内容@

    • OnTouchListener - 监听搜索栏触摸事件
    • OnKeyListener - 监听 seekbar 的 dpad 和 trakball 事件

    我为 getView 的搜索栏设置了这些侦听器

    每当调用侦听器时,我都会找到 seekbars 父级,然后从父级到 textview 执行 findviewbyid

    所以现在我有了必须更新的文本视图和搜索栏。我需要做的就是从数组中设置文本。

    这里有一些代码可以帮助你。

    私有 OnTouchListener touchListener = new 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;
        }
    };
    

    【讨论】:

      【解决方案2】:

      您可能需要每次都膨胀布局,而不是重复使用传入的 convertView。除非您有很多行,否则这应该不是问题。

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 1970-01-01
        相关资源
        最近更新 更多