我在GridView中设置单个单元格的颜色有奇怪的问题。
问题描述: 我的gridview包含很多包含简单文本的单个单元格。我已经设置ViewHolder来维护每个单元格的某个位置。用户可以单击每个项目,然后它应该将其颜色更改为其他项目。改变颜色有效,但它也改变了未被选中的细胞的颜色。这仅在我向上和向下滚动gridview时显示。然后背景颜色变得混杂。
这是我的HintGridAdapter:
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.chips_hint_grid, parent, false);
viewHolder = new ViewHolder();
viewHolder.hintTag = (TextView) convertView.findViewById(R.id.hint_tag);
viewHolder.hintTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.hintTag.setBackgroundColor(context.getResources().getColor(R.color.color_accent));
chips.setText(chips.getText() + tags[position] + ", ");
chips.setChips();
}
});
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.hintTag.setText(tags[position]);
return convertView;
}
private static class ViewHolder {
TextView hintTag;
}
如您所见,我已将背景颜色设置为特定的hintTag。
和XMLs:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical">
<TextView
android:id="@+id/hint_tag"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:padding="8dp"
android:text="@string/tag"
android:background="@drawable/hint_button_selector"
android:textColor="@color/grey_white_1000"
android:textSize="12sp" />
</RelativeLayout>
这是hint_button_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/color_accent" android:state_activated="true" />
<item android:drawable="@color/color_accent" android:state_selected="true" />
<item android:drawable="@color/color_accent" android:state_pressed="true" />
<item android:drawable="@color/color_accent" android:state_checked="true" />
<item android:drawable="@color/black_opacity_55" />
</selector>
颜色变化应该在选择器中起作用,但它并不适用。
答案 0 :(得分:1)
声明一个Int类型的arrayList。
ArrayList<Integer> clickedPos=new ArrayList<>();
然后将getView更新为
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.chips_hint_grid, parent, false);
viewHolder = new ViewHolder();
viewHolder.hintTag = (TextView) convertView.findViewById(R.id.hint_tag);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.hintTag.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!clickedPos.contains(position))
clickedPos.add(position);
viewHolder.hintTag.setBackgroundColor(context.getResources().getColor(R.color.color_accent));
chips.setText(chips.getText() + tags[position] + ", ");
chips.setChips();
}
});
if(clickedPos.contains(position))
viewHolder.hintTag.setBackgroundColor(context.getResources().getColor(R.color.color_accent));
else
viewHolder.hintTag.setBackgroundColor(context.getResources().getColor(R.color.default_color));
viewHolder.hintTag.setText(tags[position]);
return convertView;
}
如果再次点击,您可以添加其他条件来设置背景颜色默认值。