Я хочу обновить второй список массивов AutocompleteTextView после нажатия первого. Но как-то он не обновляет список, пока я не нажму дважды.
Я работаю над проектом Android, я установил два AutocompleteTextViewОдин из элементов содержит Location, а второй содержит информацию о sub-location. Я установил основные местоположения локально на APP, и я хочу обновить второй список предложений после нажатия на первый. Проблема, с которой я столкнулся, заключается в том, что, когда я нажимаю на первую, я вижу, что я успешно вызываю веб-службу, и могу регистрировать возвращенный массив json, но каким-то образом массив-адаптер не обновляется новым списком. Когда янажмите в первый раз, похоже, что адаптер все еще содержит предыдущий список. Когда я дважды щелкаю одну и ту же опцию, я вижу, что дочерний выпадающий список обновляется. похоже, что задержка в обновлении задерживается, но почему-то я не могу понять, почему это происходит.
public class MainActivity extends AppCompatActivity {
AutoCompleteTextView CityTextView;
AutoCompleteTextView DistrictTextView;
public JSONArray jSonDist;
public ArrayAdapter districtAdapter;
public List<String> districtList;
private JSONArray configuredResponse;
private String CityName,District;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
String[] Cities ={"CITY1","CITY2"};
ArrayAdapter<String> adapter = new ArrayAdapter<>
(this,android.R.layout.select_dialog_item,Cities);
CityTextView=findViewById(R.id.PosCityDropdown);
CityTextView.setAdapter(adapter);
CityTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
CityName = CityTextView.getText().toString();
DistrictTextView = findViewById(R.id.PosDistrictDropdown);
JSONArray DistrictArray=getCOnfiguredLocation(getApplicationContext(),CityName);
List<String> DistrictList=getListWards(DistrictArray);
districtAdapter = new ArrayAdapter<>(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, DistrictList);
DistrictTextView.setAdapter(districtAdapter);
}
});
}
private JSONArray getCOnfiguredLocation(Context mContext, String CityValue) {
final StringRequest Jsonarray= new StringRequest
(Request.Method.POST, "URL", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
tzdistrictAdapter.notifyDataSetChanged();
try {
configuredResponse= new JSONArray(response);
} catch (JSONException e) {
e.printStackTrace();
}
districtList=getListWards(configuredResponse);
// JsonList=getListWards(jSonDist);
// Toast.makeText(getApplicationContext(), "Response From the server: "+getListWards(jSonDist), Toast.LENGTH_LONG).show();
Log.d("ResponseCode", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// pDialog.dismiss();
//Display error message whenever an error occurs
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
})
{
@Override
protected Map<String, String> getParams()
{
Map<String, String> data = new HashMap<String, String>();
data.put("name",CityName);
data.put("level","2");
return data;
}
};
// Access the RequestQueue through your singleton class.
PvsVolley.getInstance(this).addToRequestQueue(Jsonarray);
return configuredResponse;
}
public List<String> getListWards(JSONArray Wards)
{
List<String> ListWards = new ArrayList<>();
if (Wards!=null) {
for (int j = 0; j < Wards.length(); j++) {
String wardone = null;
try {
wardone = Wards.getString(j);
} catch (JSONException e) {
e.printStackTrace();
}
ListWards.add(wardone);
}
}
else {
ListWards.add(District);
}
return ListWards;
}
}
Я ожидал результатов от вызова сети Volley (я используюкласс singleton для выполнения сетевого вызова), который будет показываться вам каждый раз, когда я изменяю первый выбор, скажем, City1 или City2, но этого не происходит, кажется, что список обновляется при втором выборе, что не годится для пользовательского опыта