在我的应用程序中,我使用带有几个随机放置的ImageView的GridView。用户应选择图像。为了标记所选的一个,我使用setBackgroundColor()作为视图。我的问题是,如果用户现在想要选择另一个图像,必须重置(或设置为白色)先前所选图像(或网格中的所有图像)的背景。知道怎么做吗?
或者,是否有另一种可能性来实现它,以便网格中的选定图像将被突出显示?
编辑:感谢您提供评论中的所有提示。解决方案如下。
答案 0 :(得分:1)
再次设置适配器
@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);
}
});
}
答案 1 :(得分:0)
好的,我检查的一个可能的工作解决方案(Rachel Gallen的链接之一)是使用
gridView.getChildAt(previous).setBackgroundColor(Color.WHITE);
我使用的另一个解决方案是在静态变量中保存前一个视图的脏黑客:
...
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);
}
});
}