Android 如何在GridView中重置所有ImageView背景?

Android 如何在GridView中重置所有ImageView背景?,android,gridview,Android,Gridview,在我的应用程序中,我使用一个GridView和几个随机放置的ImageView。用户应该选择一个图像。为了标记所选的一个,我使用setBackgroundColor()作为视图。我的问题是,如果用户现在想选择另一个图像,则必须重置(或设置为白色)上一个选定图像(或网格中的所有图像)的背景。你知道怎么做吗 或者,是否有另一种可能实现它,以便网格中选定的图像将高亮显示 编辑:感谢您在评论中提供的所有提示。解决方案如下。再次设置适配器 @Override public void onCrea

在我的应用程序中,我使用一个GridView和几个随机放置的ImageView。用户应该选择一个图像。为了标记所选的一个,我使用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);
            }
        });
    }
再次设置适配器

 @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); 
我使用的另一个解决方案是在静态变量中保留上一个视图的肮脏破解:

...
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);
            }
        });
    }

好的,一个可行的解决方案(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);
            }
        });
    }

查看或是否要重新加载栅格视图???@Swati,我的图像随机放置在栅格视图中。如果我重新加载GridView,图像的位置将发生变化,因此GridView无法重新加载…@Rachel Gallen:我知道,谢谢,但是如何在GridView中使用选择器?您是否查看了第二个链接?查看或是否要重新加载grid view???@Swati我的图像随机放置在GridView中。如果我重新加载GridView,图像的位置会改变,因此GridView无法重新加载…@Rachel Gallen:我知道,谢谢,但是如何在GridView中使用选择器?你看过第二个链接了吗?@Praven:谢谢,但这不起作用,我无法重新加载GridView,因为我的图像是随机放置的,所以在重新加载后,所有图像都会被更改…@Praven:谢谢,但这不起作用,我无法重新加载GridView,因为我的图像是随机放置的,所以在重新加载后,所有图像都会被更改。。。