自定义组件随机播放列表视图

时间:2012-09-21 15:17:42

标签: android listview

我在自定义列表视图中制作条形图。当我滚动列表时,组件得到洗牌。如何停止。

@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;
    }

1 个答案:

答案 0 :(得分:0)

在列表视图中使用visible / gone标志似乎不对。

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

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