解决方案 »

  1.   

    ListView基于效率和性能的考虑, 所以并不是为每个item都生成一个View的, 一般来讲只为显示的那几个生成View. 像你的程序,假设有100个item,但是屏幕上只显示5个的话, Monitor只会存在5个,然后循环使用。所以你要是想正确的显示,getView的时候得重新给view 赋值
    public View getView(int position, View convertView, ViewGroup parent) {
            Monitor monitor;        if (convertView == null) {
             monitor = new Monitor(context);
             //monitor.setChannel(channels.get(position));
             monitor.setStream(1);
             monitor.setEnableOSD(true);            Point size = new Point();            ((Activity) context).getWindowManager()
                        .getDefaultDisplay().getSize(size);
                monitor.setLayoutParams(new GridView.LayoutParams
                 (GridView.LayoutParams.MATCH_PARENT, size.x / 16 * 9 + 1));
                monitor.setPadding(1, 1, 1, 1);
            } else {
             monitor = (Monitor) convertView;
            }
            monitor.setChannel(channels.get(position));   //赋值的操作是在monitor获得后再做,不能放在生成的位置        return monitor;
        }