Я использую текстовое представление автозаполнения, которое динамически извлекает данные с сервера. Это текстовое представление автозаполнения находится внутри настраиваемого диалогового окна. Все работает нормально, но единственная проблема заключается в том, что когда я пытаюсь получить выбранное значение автозаполнения, он дает мне ноль значение.
Вот мои объявления во фрагменте -
AutoCompleteTextView sp_city;
ArrayAdapter<GetMyCityAdapter> spinneradapter;
List<GetMyCityAdapter> getMyCityAdapter1;
private ArrayList<String> city = new ArrayList<String>();
Вот код моего диалогового окна -
btn_searchfreelancerfilter.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View view) {
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
// ...Irrelevant code for customizing the buttons and title
LayoutInflater inflater = getActivity().getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.freelancerfilterdialog, null);
dialogBuilder.setView(dialogView);
dialogBuilder.setCancelable(true);
dialogBuilder.setTitle("Search Freelancer");
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
selectedcityvalue = spinneradapter.getItem(i).getCity_name();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
sp_city = (AutoCompleteTextView) dialogView.findViewById(R.id.sp_sf_city);
loadCity();
dialogBuilder.setPositiveButton("Search", new DialogInterface.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void onClick(DialogInterface dialog, int id) {
LoadFilteredData(selectedcityvalue);
}
});
final AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
}
});
Вот мой loadCity
код метода -
private void loadCity() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_CITY, new Response.Listener<String>() {
@Override
public void onResponse(String response_city) {
showJSONCITY(response_city);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error", "" + error);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
int socketTimeout = 30000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
requestQueue.add(stringRequest);
}
private void showJSONCITY(String response_city) {
try {
JSONObject jsonObject = new JSONObject(response_city);
JSONArray data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject jsonObject1 = data.getJSONObject(i);
GetMyCityAdapter getMyCityAdapter2 = new GetMyCityAdapter("0", "select_type");
getMyCityAdapter2.setCity_id(jsonObject1.getString("c_id"));
getMyCityAdapter2.setCity_name(jsonObject1.getString("c_name"));
getMyCityAdapter1.add(getMyCityAdapter2);
city.add(jsonObject1.getString("c_name"));
}
ArrayList<GetMyCityAdapter> citylist = new ArrayList<>();
for (int i = 0; i < city.size(); i++) {
citylist.add(new GetMyCityAdapter(getMyCityAdapter1.get(i).getCity_id(), getMyCityAdapter1.get(i).getCity_name()));
}
spinneradapter = new ArrayAdapter<GetMyCityAdapter>(getActivity(), android.R.layout.simple_spinner_dropdown_item, citylist);
sp_city.setAdapter(spinneradapter);
sp_city.setThreshold(1);
sp_city.setSelection(0);
} catch (JSONException e) {
e.printStackTrace();
}
}
Я успешно получил данные. Автозаполнение было заполнено данными с сервера. Он просто не извлекается на setitemclicklistener.
Нет ошибки, но она дает нулевые значения при получении выбранных значений.