在我的应用程序中,我使用带有几个随机放置的 ImageView 的 GridView。用户应该选择一个图像。为了标记选定的,我使用 setBackgroundColor() 作为视图。我的问题是,如果用户现在想选择另一个图像,则必须重置先前选择的图像(或网格中的所有图像)的背景(或设置为白色)。知道怎么做吗?
或者,是否有另一种可能性来实现它,以便突出显示网格中的选定图像?
编辑:感谢您在评论中的所有提示。下面的解决方案。
再次设置适配器
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
Context context = this;
gridView = (GridView) findViewById(R.id.grid_view);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View v,
int position, long id) {
gridView.setAdapter(new ImageAdapter(context));
v.setBackgroundColor(Color.CYAN);
}
});
}
好的,我检查的一个可能的工作解决方案(Rachel Gallen 的链接之一)是使用
gridView.getChildAt(previous).setBackgroundColor(Color.WHITE);
我使用的另一个解决方案是在静态变量中保存前一个视图的脏 hack:
...
View previousView = null;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_layout);
gridView = (GridView) findViewById(R.id.grid_view);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View v,
int position, long id) {
if (previewView != null) {
previewView.setBackgroundColor(BACKGROUNDCOLOR);
}
previewView = v;
v.setBackgroundColor(HIGHLIGHTCOLOR);
}
});
}