我有一个活动CheckUserLocation.java
,有2个TextViews -
chooseCityTextView
- 从列表中选择特定城市chooseAreaTextView
- 选择属于该城市的特定区域。当用户按下chooseCityTextView
时,会创建一个Dialog
,其中会显示一系列城市(singleChoice
)。目前,我正在展示3个城市 - 班加罗尔,德里,诺伊达。
用户选择城市后, city 的对话框将被取消。然后用户按chooseAreaTextView
,创建另一个对话框,显示区域列表。
对话框( city 和 area )顶部都有一个搜索框,可用于搜索特定的< em> city 或 area (如果List太长)。为此我将TextWatcher
用于两个搜索框 - 一个用于 city ,另一个用于区域 - 并且在{{1}中使用了getFilter()
两个onTextChanged()
的方法。
当用户选择特定城市时,将清除整个 areaList ,并向其添加新区域。 这是代码 -
TextWatchers
问题是当用户在区域dialog_ListView_City.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Get the city selected
selectedItem_City = parent.getItemAtPosition(position).toString();
chooseCityTextView.setText(selectedItem_City);
Log.d("Selected City -", selectedItem_City);
try {
//get JSON Data from Model class
JSONArray copyOfJSONArray = CityJSONData.getLocationJSONArray();
Log.e("fetched copy of", "JSONArray");
Log.e("size of JSON Array", "" + copyOfJSONArray.length());
for (int index = 0; index < copyOfJSONArray.length(); index++) {
Log.e("in for loop", "");
//get single JSON Object from the JSONArray
//here, each JSON Object corresponds to a CITY
JSONObject jsonObject = copyOfJSONArray.getJSONObject(index);
//each City has a CITY CODE and a CITY NAME, along with a JSON Object named "AREAS"
String cityName = jsonObject.getString("city_name");
if (cityName.equalsIgnoreCase(selectedItem_City)) {
Log.d("Match", "Found");
JSONArray areasJSONArray = jsonObject.getJSONArray("areas");
//remove previous AREAS from List before adding NEW ones
areaList.clear();
for (int areaIndex = 0; areaIndex < areasJSONArray.length(); areaIndex++) {
JSONObject areaJSONObject = null;
areaJSONObject = areasJSONArray.getJSONObject(areaIndex);
//AREAS object contains "area_code" and "area_name"
String areaName = areaJSONObject.getString("area_name");
Log.e("Area Added -", areaName);
//also add it areaList
areaList.add(areaName);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
Collections.sort(areaList);
dataAdapterForArea.notifyDataSetChanged();
dialog_City.dismiss();
chooseAreaTextView.setText("");
chooseAreaTextView.setHint("Select Area");
}
的搜索栏中输入文本时,过滤器工作正常,但适配器不会使用新的区域刷新列表值即使用户选择其他城市也是如此。
我不明白为什么会发生这种情况,即使我在选择新城市时清除 areaList ,并且还要为其添加新值( < em> Logger 正在成功打印。
以下是我遇到的问题的屏幕截图 -
即使 Logger 显示新的 Area 值(班加罗尔) - 第1阶段,JP Nagar和第2阶段,JP Nagar, Dialog
仍显示Noida(之前的选择)区域(第6区,第18区,第16区)。
答案 0 :(得分:0)
您需要做的是将适配器重新分配给列表,因为此列表不会反映其数据更改。 像这样重新签名适配器。
yourAdapterInstance = new YourAdapter(Pass here your new list. e.g areanames);
yourlistview.setAdapter(yourAdapterInstance);