安卓学习之解决Spinner不显示的问题

本文探讨了Spinner组件在使用自定义适配器时未显示默认值的问题,并提供了有效的解决方案。问题出现在异步加载数据过程中,当调用setAdapter方法时适配器中尚未填充数据。文章建议在数据加载完成后设置适配器,以确保Spinner正常工作。

数据加载完切无误之后,发现spinner并没有默认值,数据是ArrayList<>保存的,然后给他配置适配器

适配器代码:

public class MyAdapter extends BaseAdapter {
    private List<Area> mList;
    private Context mContext;

    public MyAdapter(Context pContext, List<Area> pList){
        this.mContext = pContext;
        this.mList = pList;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        LayoutInflater _LayoutInflater= LayoutInflater.from(mContext);
        view = _LayoutInflater.inflate(R.layout.item,null);
        TextView name = (TextView) view.findViewById(R.id.name);
        name.setText(mList.get(i).getName());
        return view;
    }
}
配置适配器:

city_adapter = new MyAdapter(this,cities);
city_spinner.setAdapter(city_adapter);
cities是保存数据的ArrayList<>

然后无论是初始化还是点击之后spinner都没显示

问题找到:摘自优快云论坛:这个问题好像是楼主异步加载数据造成的。当调用spinner.setAdapter()时候,那个adapter中还没有数据,自定义adapter也是一样问题,其实哪怕adapter中仅有一条记录,后期异步添加数据都没有问题。但一条数据都没有便会出现该问题,然而点击spinner任然会显示异步加载的数据。
最好的办法是,是异步数据加载完成后在调用spinner.setAdapter()就不会存在该问题

解决办法:可以在加载数据函数中判断是否数据加载完成,然后给handler发送一条数据来给spinner设置适配器


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值