You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何设置Spinner选中项的ImageView为VISIBLE、未选中为GONE

实现步骤

1. 修改FruitAdapter适配器

新增选中位置存储变量、更新选中位置的方法,在getView中根据选中状态控制图标可见性:

public class FruitAdapter extends BaseAdapter {
    private Context context;
    private List<Fruit> fruitList;
    // 存储当前选中的位置,默认-1表示无选中
    private int selectedPosition = -1;

    public FruitAdapter(Context context, List<Fruit> fruitList) {
        this.context = context;
        this.fruitList = fruitList;
    }

    // 供外部调用更新选中位置
    public void setSelectedPosition(int position) {
        this.selectedPosition = position;
        // 刷新列表更新所有项的状态
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return fruitList != null ? fruitList.size() : 0;
    }

    @Override
    public Object getItem(int i) {
        // 修正原代码的错误,返回对应位置的数据项而非索引
        return fruitList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View rootView = LayoutInflater.from(context)
                .inflate(R.layout.item_fruit, viewGroup, false);

        TextView txtName = rootView.findViewById(R.id.name);
        ImageView image = rootView.findViewById(R.id.image);
        ImageView selected = rootView.findViewById(R.id.selected);

        txtName.setText(fruitList.get(i).getName());
        image.setImageResource(fruitList.get(i).getImage());

        // 根据选中状态控制图标可见性
        selected.setVisibility(i == selectedPosition ? View.VISIBLE : View.GONE);
        
        return rootView;
    }
}

2. 修改MainActivity添加选中监听

给Spinner绑定选中事件回调,将选中位置传递给适配器:

public class MainActivity extends AppCompatActivity implements CustomSpinner.OnSpinnerEventsListener{

    private CustomSpinner spinner_fruits;
    private FruitAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner_fruits = findViewById(R.id.spinner_fruits);
        spinner_fruits.setSpinnerEventsListener(this);

        adapter = new FruitAdapter(MainActivity.this, Data.getFruitList());
        spinner_fruits.setAdapter(adapter);

        // 新增Spinner选项选中监听
        spinner_fruits.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                adapter.setSelectedPosition(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                adapter.setSelectedPosition(-1);
            }
        });
    }

    @Override
    public void onPopupWindowOpened(Spinner spinner) {
        spinner_fruits.setBackground(getResources().getDrawable(R.drawable.bg_spinner_fruit_up));
    }

    @Override
    public void onPopupWindowClosed(Spinner spinner) {
        spinner_fruits.setBackground(getResources().getDrawable(R.drawable.bg_spinner_fruit));
    }
}

可选优化

可以给getView添加ViewHolder复用逻辑,避免每次渲染项都重新inflate布局,提升列表滑动流畅度。

内容的提问来源于stack exchange,提问作者Android

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 20:51:02