0

我正在自定义列表视图中制作条形图。当我滚动列表时,组件会随机播放。怎么可能阻止。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.stats_row_layout, null);
        }

        Stat stat = objects.get(position);

        if (stat.isFlag()) {
            LinearLayout linearLayout = (LinearLayout) convertView.findViewById(R.id.parentLayout);
            linearLayout.setVisibility(LinearLayout.VISIBLE);
        } else {
            LinearLayout linearLayout = (LinearLayout) convertView.findViewById(R.id.parentLayout);
            linearLayout.setVisibility(LinearLayout.GONE);
        }

        if (!stat.isExist()) {
            stat.setExist(true);

            LinearLayout linearLayout = (LinearLayout) convertView.findViewById(R.id.statGraphLayout);
            linearLayout.removeAllViews();

            if (stat.getmView() == null) {
                ImageView mView = new StatBarChartVie(context, stat.getStatValues());
                stat.setmView(mView);
            }

            LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 50);
            stat.getmView().setLayoutParams(params);

            linearLayout.addView(stat.getmView());

                            }
        }

        return convertView;
    }
4

1 回答 1

0

在列表视图中使用可见/消失标志似乎不正确。

由于列表视图如何回收视图,这可能是问题所在。您可能需要更聪明地了解如何访问阵列。并且不包括计数中的不可见项目。

每当您更改数据(可能覆盖 notifyDataSetChanged() 调用其超级数据)时,您都可以创建一个仅包含可见值的新索引 ArrayList。因此,您不再需要使用隐形设置。这样,您只需在数据更改时循环遍历数组。

于 2013-07-23T06:57:23.373 回答