我在自定义列表视图中制作条形图。当我滚动列表时,组件得到洗牌。如何停止。
@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;
}
答案 0 :(得分:0)
在列表视图中使用visible / gone标志似乎不对。
由于列表视图如何回收视图,这可能是问题所在。 您可能需要更加智能地了解如何访问阵列。并且不包括计数中的不可见项目。
每当您更改数据时(可能会覆盖调用其超级的notifyDataSetChanged()),您可以创建一个只包含可见值的新Index ArrayList。所以你不再需要使用不可见的设置。这样,您只需在数据更改时循环遍历数组。