【发布时间】:2015-02-22 14:52:00
【问题描述】:
我在 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;
}
如您所见,我已将背景颜色设置为特定的提示标签。
还有 XML:
<?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>
颜色变化应该在选择器中起作用,但它不起作用。
【问题讨论】:
-
“用户可以点击每个项目,然后它应该将其颜色更改为其他” - 您似乎没有任何代码来执行此操作。
-
您必须维护一个单击位置的数组列表,然后检查 getView 位置数组是否包含当前位置,如果是则设置颜色,否则设置默认颜色。
-
@CommonsWare 它在 onClick 方法中,第一行。
-
当细胞被回收时,你在哪里撤消改变?