gpt4 book ai didi

java - notifydatasetchanged 从监听器不工作

转载 作者:行者123 更新时间:2023-11-29 03:45:39 24 4
gpt4 key购买 nike

我正在尝试使用 notifyDatasetChanged() 从位置监听器的 onLocationChanged 函数中更新我的 Activity 的 ListView,但它不起作用。但是,我可以在我的代码中的同一点使用 setListAdapter,这会起作用。

这是我的代码:

public class TestListeners extends ListActivity {

ArrayAdapter adapter;

private final LocationListener networkLocationListener = new LocationListener() {

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
break;
case LocationProvider.OUT_OF_SERVICE:
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
break;
}
}

@Override
public void onProviderEnabled(String provider) {
}

@Override
public void onProviderDisabled(String provider) {
}

@Override
public void onLocationChanged(Location location) {
checkProximity(location.getLatitude(), location.getLongitude(), cx);
}
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//get a list here venueNamesArray
//etc

adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1,
venueNamesArray);

setListAdapter(adapter);
}


private void checkProximity(double curLat, double curLon, Context cx) {

//get a different list here venueNamesArray
//etc

adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1, android.R.id.text1,
venueNamesArray);

adapter.notifyDataSetChanged();//this doesnt work and no error is thrown
setListAdapter(adapter);//this works


}

}

我想使用 notifyDatasetChanged() 而不是 setListAdapter 的原因是 ListView 在设置时会滚动回顶部。当我使用 notifyDatasetChanged() 时不会抛出任何错误,所以我很难理解为什么这不起作用。

我尝试为此使用普通的 ListView 而不是扩展 ListActivity,但遇到了同样的问题。

最佳答案

因为你每次都在创建一个新的适配器。您不仅要更改当前链接到列表的同一适配器中的数据.......

当您创建新的适配器时,新的适配器将不会与列表链接,直到您调用 setAdpter 所以调用 adapter.notifyDataSetChanged() 是不值得的;对于未与列表链接的 adtper...

解决方案

不需要每次都创建适配器。 jsut 在 On-create 中创建和设置一次,只更改 ArrayList(添加/删除而不是创建新的)并调用 adapter.notifyDataSetChanged();

关于java - notifydatasetchanged 从监听器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com