ArraryAdaper的notifyDataSetChanged问题

本文探讨了一个关于Android开发中Spinner组件数据更新的问题。在一个项目中,作者尝试从一个Activity更改另一个Activity中Spinner的数据源,但发现仅通过调用notifyDataSetChanged()无法实时更新视图。文章详细记录了解决这一问题的过程,并分享了最终成功的方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导师的项目中遇到Spinner中数据项更新的问题,两个Activity,一个Main,一个OpenFileDialog。


Main中的spinner绑定了adapter。

countyList = new ArrayList<String>();
townList = new ArrayList<String>();
villageList = new ArrayList<String>();
organizeList = new ArrayList<String>();

countyAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, countyList);
countyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
login_spinner1.setAdapter(countyAdapter);
声明如下:

public static ArrayList<String> countyList, townList, villageList, organizeList;
public static String username;
public static String county, town, village, organize;
public static ArrayAdapter<String>  countyAdapter,townAdapter,villageAdapter,organizeAdapter;


都是静态的全局变量。


然后我在OpenFileDialog中改变adapter绑定的数据源,并调用notifyDataSetChanged()

public  void updateCountyList(ArrayList<String> infoList){
    MainActivity.countyList.clear();
    MainActivity.countyList.addAll(infoList);
    MainActivity.countyAdapter.notifyDataSetChanged();
}
调试发现,adapter里的数据源变是变了,但是spinner里显示的没有变化,不知道为什么。


后来,把adapter在OpenFileDialog中定义

ArrayAdapter<String> adapter1;
adapter1=new ArrayAdapter<String>(mContext,android.R.layout.simple_spinner_item,MainActivity.countyList);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MainActivity.login_spinner1.setAdapter(adapter1);
再一样的改变数据源,调用notifyDataSetChanged()

public  void updateCountyList(ArrayList<String> infoList){
    MainActivity.countyList.clear();
    MainActivity.countyList.addAll(infoList);
    adapter1.notifyDataSetChanged();
}

结果就成功改变了main里的spinner的数据项。



然而并没有发现到底是哪里的问题,初步猜测是context或者是static的问题? 记录下来以后知道的更多了希望能自己解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值