Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getView中不需要的显示_Android_Listview - Fatal编程技术网

Android getView中不需要的显示

Android getView中不需要的显示,android,listview,Android,Listview,我有一个使用自定义布局的listview。布局内部是一个pin imageview。这样做的目的是将相同的颜色保留在列表中的适当位置。存储具有管脚的位置的变量称为int[]ping。如果ping[position]==1,则在那里设置一个图形,否则使其不可见。当我必须刷新我的列表时,这项功能会起作用。例如,第一个项目将始终有一个红色的别针,第二个将是淡蓝色等 我的问题是当我刷新我的列表(自动调用我的专用适配器中的getview)时,我没有选择第一个项目(项目1不可见)。在使用getView函数而

我有一个使用自定义布局的listview。布局内部是一个pin imageview。这样做的目的是将相同的颜色保留在列表中的适当位置。存储具有管脚的位置的变量称为int[]ping。如果ping[position]==1,则在那里设置一个图形,否则使其不可见。当我必须刷新我的列表时,这项功能会起作用。例如,第一个项目将始终有一个红色的别针,第二个将是淡蓝色等

我的问题是当我刷新我的列表(自动调用我的专用适配器中的getview)时,我没有选择第一个项目(项目1不可见)。在使用getView函数而不是一个不可见项之后,我现在看到该项位于最高位置。(例如,如果我同时戴上一个黑色和蓝色的别针,我将在第一个点看到一个黑色的别针,这应该是不可能的,因为第一个点应该只有一个红色的别针)。这似乎是一个简单的解决办法,但我似乎不明白。这是我的特殊适配器代码。谢谢

编辑代码现在要短得多,因为我正在将我的绘图放入一个数组中

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

}
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.pinrange,R.drawable.pinyellow,R.drawable.pinwhite,R.drawable.pinpurple};
公共类SpecialAdapter扩展了SimpleAdapter{
private int[]colors=new int[]{R.drawable.row\u background\u grey,
R.drawable.row_background_white};
公共SpecialAdapter(上下文,
ArrayList列表,int资源,
字符串[]从,整数[]到){
超级(上下文、列表、资源、发件人、收件人);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=super.getView(位置、转换视图、父级);
ImageView pincolor=(ImageView)视图
.findViewById(R.id.ivimtrackingpin);
如果(ping[位置]==1){
pincolor.setImageResource(pincolors[position]);
pincolor.setVisibility(View.VISIBLE);
}
int colorPos=位置%colors.length;
视图.setBackgroundResource(颜色[colorPos]);
返回视图;
}
}

注:如果我刷新时打开了第一项(显示红色pin),则不会更改红色pin

你可以避免一个开关,把你所有的绘图元素放在一个数组中,然后只有一个集合可见。虽然我可以试一下,但是仍然让人困惑的是,为什么只有我的第一个位置在刷新前被打开时才会被更改,而且它总是采用最后一个位置的颜色