来自getView的不需要的显示

时间:2011-08-27 21:06:12

标签: android listview

我有一个使用自定义布局的列表视图。布局内部是pin imageview。这样做的目的是将相同的颜色保持在列表中的适当位置。存储哪些位置有引脚的变量称为int [] ping。如果ping [position] == 1然后在那里设置一个绘图,否则让它不可见。这在我必须刷新列表时有效。例如,第一个项目将始终具有红色引脚,第二个项目将为淡蓝色等...

我的问题是当我刷新列表时(在我的特殊适配器中自动调用getview)并且我没有选择第一个项目(项目1是不可见的)。通过getView函数而不是隐形项后,我现在看到该项位于最高位置。 (例如,如果我同时打开黑色和蓝色引脚,我会在第一个点看到一个黑色引脚,这应该是不可能的,因为第一个应该只有一个红色引脚)。这似乎是一个简单的解决方案,但我似乎无法弄明白。这是我的特殊适配器的代码。谢谢!

编辑现在代码要短得多,因为我把我的drawables放到了一个数组中。

final public static int[]pincolors={R.drawable.pinred,R.drawable.pinliteblue,R.drawable.pinblack,R.drawable.pindarkblue,R.drawable.pingreen,R.drawable.pinlitegreen,R.drawable.pinorange,R.drawable.pinyellow,R.drawable.pinwhite,R.drawable.pinpurple};

public class SpecialAdapter extends SimpleAdapter {
    private int[] colors = new int[] { R.drawable.row_background_grey,
            R.drawable.row_background_white };

    public SpecialAdapter(Context context,
            ArrayList<HashMap<String, String>> list, int resource,
            String[] from, int[] to) {
        super(context, list, resource, from, to);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = super.getView(position, convertView, parent);
        ImageView pincolor = (ImageView) view
                .findViewById(R.id.ivimtrackingpin);

        if (ping[position] == 1) {
                pincolor.setImageResource(pincolors[position]);
                pincolor.setVisibility(View.VISIBLE);
            }

        int colorPos = position % colors.length;
        view.setBackgroundResource(colors[colorPos]);
        return view;
    }

}

PS。如果我刷新时第一项开启(红色引脚显示),红色引脚不会改变!

0 个答案:

没有答案