Android getView中不需要的显示
我有一个使用自定义布局的listview。布局内部是一个pin imageview。这样做的目的是将相同的颜色保留在列表中的适当位置。存储具有管脚的位置的变量称为int[]ping。如果ping[position]==1,则在那里设置一个图形,否则使其不可见。当我必须刷新我的列表时,这项功能会起作用。例如,第一个项目将始终有一个红色的别针,第二个将是淡蓝色等 我的问题是当我刷新我的列表(自动调用我的专用适配器中的getview)时,我没有选择第一个项目(项目1不可见)。在使用getView函数而不是一个不可见项之后,我现在看到该项位于最高位置。(例如,如果我同时戴上一个黑色和蓝色的别针,我将在第一个点看到一个黑色的别针,这应该是不可能的,因为第一个点应该只有一个红色的别针)。这似乎是一个简单的解决办法,但我似乎不明白。这是我的特殊适配器代码。谢谢 编辑代码现在要短得多,因为我正在将我的绘图放入一个数组中Android getView中不需要的显示,android,listview,Android,Listview,我有一个使用自定义布局的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 你可以避免一个开关,把你所有的绘图元素放在一个数组中,然后只有一个集合可见。虽然我可以试一下,但是仍然让人困惑的是,为什么只有我的第一个位置在刷新前被打开时才会被更改,而且它总是采用最后一个位置的颜色