我正在尝试使用Geocoder API构建地址搜索器,其中用户键入位置名称,并且所有相关地址都显示在列表视图中。Android:外部ListView更改的适配器问题
我在运行搜索时,出现此错误:
java.lang.IllegalStateException:适配器的内容 改变,但ListView控件没有收到通知。确保您的适配器的 内容不是从后台线程修改的,而是仅从修改的UI线程。
确保您的适配器在其内容更改时调用 notifyDataSetChanged()。
这是我实现:
SimpleStringAdapter adapter;
ArrayList<String> items = new ArrayList<>();
ListView addressList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_address);
addressList = (ListView) findViewById(R.id.addressList);
addressBox = (EditText) findViewById(R.id.addressBox);
//Search for locations when the user types in
addressBox.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(final CharSequence s, int start, int before, int count) {
//Search the typed location
SearchAddresses(searchText);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private void SearchAddresses(String searchText) {
Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocationName(searchText, 5);
addressList.setAdapter(null);
if (addresses.size() != 0) {
//Add the Address line to the list
items.add(addresses.get(0).getAddressLine(0));
//Populate the listview
adapter = new SimpleStringAdapter(this, items);
addressList.setAdapter(adapter);
}
} catch (Exception e) {
e.printStackTrace();
}
}
而且ListView控件适配器只是简单地设置文本到一个TextView。如果您需要查看,请告诉我。
我在做什么错?
将notifydatasetchanged应用于您的适配器。 – LoveAndroid
请告诉我在哪里添加,关于代码示例@LoveAndroid – Dinuka
我见过几个答案,说同样的事情,但没有一个说明我应该添加它和任何解释:) – Dinuka