notifyDatasetChanged()を使用してロケーションリスナーのonLocationChanged関数内からアクティビティの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
}
}
setListAdapterの代わりにnotifyDatasetChanged()を使用する理由は、リストビューを設定するとリストビューが一番上にスクロールバックするためです。notifyDatasetChanged()を使用してもエラーはスローされないため、これが機能しない理由を理解するのは困難です。
ListActivityを拡張する代わりに、通常のListViewを使用しようとしましたが、同じ問題が発生しました。