1

在我的应用程序中,我使用带有几个随机放置的 ImageView 的 GridView。用户应该选择一个图像。为了标记选定的,我使用 setBackgroundColor() 作为视图。我的问题是,如果用户现在想选择另一个图像,则必须重置先前选择的图像(或网格中的所有图像)的背景(或设置为白色)。知道怎么做吗?

或者,是否有另一种可能性来实现它,以便突出显示网格中的选定图像?

编辑:感谢您在评论中的所有提示。下面的解决方案。

4

2 回答 2

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);
            }
        });
    }
于 2013-01-26T17:14:38.587 回答
0

好的,我检查的一个可能的工作解决方案(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);
            }
        });
    }
于 2013-01-26T19:07:49.033 回答