我有一个Gridview,当我按某个元素时,我想画背景。
我有一个适配器以动态加载gridview元素。我有一个适配器的监听器。 在那个监听器上,我用我想要的颜色放置背景,但是它也在列表中绘制了另一个元素(我想是在重新加载视图后具有相同位置的元素)。
重要提示:我的最低API为9,我无法真正改变它。
以下是我的getView方法的代码(来自适配器):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder = null;
if (convertView == null) {
viewHolder=new ViewHolder();
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.highwayappselectionitem,parent, false);
viewHolder.appImageIcon=(ImageView) view.findViewById(R.id.highwayGridViewItemIcon);
viewHolder.appNameLabel=(TextView) view.findViewById(R.id.highwayGridViewItemName);
viewHolder.appInfoButton = (ImageView) view.findViewById(R.id.highwayGridViewItemInfoButton);
viewHolder.linearLayout = (LinearLayout) view.findViewById(R.id.HighwayGridViewItem);
}else{
view= convertView;
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.appNameLabel.setText(appsList.get(position).getAppName());
viewHolder.appImageIcon.setImageDrawable(appsList.get(position).getImageIcon());
view.setTag(viewHolder);
viewHolder.linearLayout.setOnClickListener(new MyOnClickListener(position,0));
return view;
}
这里是linearlayout的监听器(代表每个项目):
public void onClick(View v) {
if(selectedView==0 || selectedView==1){
appName=appsList.get(position).getAppName();
filePath=appsList.get(position).getFilePath();
appLogo=appsList.get(position).getImageIcon();
v.setBackgroundColor(activity.getResources().getColor(R.color.light_grey));
System.out.println("Just pressed the app ... "+appName);
System.out.println("His filePath is ... "+filePath);
HighwayGridViewAppItem tmpSelectedItem= new HighwayGridViewAppItem(appLogo, appName, filePath);
selectedAppsList.add(tmpSelectedItem);
System.out.println("AppSelectionCUstomAdapter : Added a new application to the list of selected apps .!!!!!!!!!!!!!!!.........");
System.out.println("AppselectioncustomAdaptaer : The size of the selectedAppsList is now : "+selectedAppsList.size());
}else{
//pressed the info button
System.out.println("This will be implemented later, need access to the webservices");
}
}
}
忽略if(选择的视图== 0或== 1它不再被使用,我可以删除它......)。
此外,appsLIst是我的自定义项目列表。我有一个布尔属性来表示它是否被选中。
发生的事情是,想象一下这个gridview:
A B C
D E F
G H I
J K L
灰线表示滚动...如果滚动显示新元素。 如果我按B,它会选择B,但它也会选择H.
我尝试做研究,但我发现的问题并不相同。
可能有帮助的东西.. gridview用于添加重复的elemet,所以当我将元素添加到gridview时,我检查元素列表是否已经有一个类似的元素,如果是这样我不添加它。
答案 0 :(得分:1)
如果要在选择后选择某个gridview项,则需要添加此行。
((BaseAdapter) gridView.getAdapter()).notifyDataSetChanged();
编辑我认为getView方法存在问题,这就是您获取重复值的原因:
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view== null) { // if it's not recycled, initialize some attributes
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
view = inflater.inflate(R.layout.highwayappselectionitem, parent, false);
}
}