我有一个CustomAdapter正常工作。
Adapter将数据插入我的Android GridView中。
现在我想当一个项目被选中时,将BackGroundItem更改为白色,并且当另一个项目被选中时,先前选择的项目颜色将变为GridView背景,我的意思是仅使用SingleChoiceMode
我写了这个:

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if(gridView.isItemChecked(position)) {
                view = gridView.getChildAt(position);
                view.setBackgroundColor(Color.WHITE);
            }else {
                view = gridView.getChildAt(position);
                view.setBackgroundColor(124333); //the color code is the background color of GridView
            }
        }
    });


但是只有第一个If起作用,这意味着当我选择一行时,颜色变为白色,但是当我选择另一行时,前一行仍然是白色,而新选择的也是白色。
我应该在else statement中写些什么?

最佳答案

每次按下adapter.notifyDataSetChanged();的任何项目时,都需要呼叫GridView刷新GridView

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            adapter.notifyDataSetChanged(); // call it here
            if(gridView.isItemChecked(position)) {
                view = gridView.getChildAt(position);
                view.setBackgroundColor(Color.WHITE);
            }else {
                view = gridView.getChildAt(position);
                view.setBackgroundColor(124333); //the color code is the background color of GridView
            }
        }


如果只想更改GridView中所选项目的颜色,则可以将android:listSelector用于GridView xml

<GridView
    ...
    android:listSelector="#ff0000" >
</GridView>

10-07 19:15
查看更多