Автозаполнение TextView с динамическим значением в диалоге - PullRequest
0 голосов
/ 01 июля 2019

Я использую текстовое представление автозаполнения, которое динамически извлекает данные с сервера. Это текстовое представление автозаполнения находится внутри настраиваемого диалогового окна. Все работает нормально, но единственная проблема заключается в том, что когда я пытаюсь получить выбранное значение автозаполнения, он дает мне ноль значение.

Вот мои объявления во фрагменте -

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. Нет ошибки, но она дает нулевые значения при получении выбранных значений.

1 Ответ

0 голосов
/ 01 июля 2019

Сначала вы должны позвонить вашему

loadCity ();

Так же, как:

 sp_city = (AutoCompleteTextView) dialogView.findViewById(R.id.sp_sf_city);
                  loadCity();

    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) {

                }
            });

Таким образом, вам нужно сначала позвонитьвсе ваши данные с сервера перед установкой адаптера для AutoCompleteTextView.

Дайте мне знать, если он работает.

...