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

表示されている/消えたフラグを使用することは、リスト ビューでは正しくないようです。

リスト ビューがビューをリサイクルする方法のため、それがおそらく問題です。配列へのアクセス方法について、もう少し賢くする必要があるかもしれません。また、目に見えないアイテムをカウントに含めないでください。

データを変更するたびに (おそらくその super を呼び出す notifyDataSetChanged() をオーバーライドする)、表示される値のみを使用して新しい Index ArrayList を作成できます。そのため、非表示の設定を使用する必要がなくなりました。このようにして、データの変更時にのみ配列をループします。

于 2013-07-23T06:57:23.373 に答える