在 AutoCompleteTextView 中应用于项目点击侦听器 returns 总是 id 为 1

In AutoCompleteTextView apply on item click listner returns always id as a 1

这是我的json回复:-

{
  "ReplyCode": 1,
  "Message": "Franchisee and Plans List",
"data2": [
    {
      "StateId": 1,
      "StateName": "Andaman and Nicobar Island",
      "CountryId": 1
    },
    {
      "StateId": 2,
      "StateName": "Andhra Pradesh",
      "CountryId": 1
    },
    {
      "StateId": 3,
      "StateName": "Arunachal Pradesh",
      "CountryId": 1
    },
    {
      "StateId": 4,
      "StateName": "Assam",
      "CountryId": 1
    },

这是我从 json 中获取数据的方法:-

 public void volleyStatedata() {

        if (mGeneralUtilities.isConnected()) {
            mProgressDialog.show();
            StringRequest stateRequest = new StringRequest(Request.Method.POST, GlobalData.REGISTER_DATA_URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {


                            mProgressDialog.dismiss();

                            try {
                                JSONObject jsonObject = new JSONObject(response);
                                JSONArray jsonArray = jsonObject.getJSONArray("data2");
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    PojoState pojoState = new PojoState();
                                    JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                                    String stateId = jsonObject1.getString("StateId");
                                    String stateName = jsonObject1.getString("StateName");
                                    mStateList.add(stateName);
                                    mStateIdList.add(stateId);
                                    pojoState.setmStateId(stateId);
                                    pojoState.setmStatename(stateName);
                                    mpojoStateList.add(pojoState);


                                }


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {

                            Log.e("error", "" + volleyError.getMessage());


                        }
                    }) {
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {

                    Map<String, String> params = new HashMap<String, String>();


                    return params;
                }
            };

            RequestQueue stateQueue = Volley.newRequestQueue(getContext());

            stateQueue.add(stateRequest);
        } else {

            mGeneralUtilities.showAlertDialog("Hey User !", "Please connect to the internet", "Ok");

        }
    }

这是我的适配器,我将其设置为自动完成文本视图:-

 ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
        mActState.setAdapter(mAdapter);
        mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                mpojoStateList.get(i).getmStateId();


            }
        });

我的问题是 autocompletetextview 总是 return id 1.i 我在 it.but 上应用 onitemclick 监听器,它正在获取 id 1 always.i 想要根据状态进行相应的 id显示了我的 json.Can 谁能告诉我如何才能做到这一点??

您的代码在 onItemClick 回调中使用了 return 的 i,它指的是您从自动完成列表中的可见项目中点击的项目,而不是您的原始项目列表。当您单击自动完成列表中的第一项时,i=0,这意味着它始终 return 是“Andaman and Nicobar Island”项,其 StateId=1.

我想不到,您可以从 mAdapter 中获取项目字符串并将其与您的 mpojoStateList 进行比较并找到相应的项目。 (查看示例代码)

    final ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
    mActState.setAdapter(mAdapter);
    mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String itemName = mAdapter.getItem(i);

            for (PojoState pojo : mpojoStateList) {
                if (pojo.mStateName.equals(itemName)) {
                    String id = pojo.getmStateId(); // This is the correct ID
                    break; // No need to keep looping once you found it.
                }
            }
        }
    });

如果在您的 PojoState 对象中覆盖您的 toString() 方法并使其 return 成为 mStateName,并传递 mpojoStateList 到适配器,而不必制作 3 ArrayLists。这样,mAdapter.getItem(i) 将 return 一个 PojoState 对象而不是字符串,您可以使用它的 ID 而无需参考 returned 位置 (i) .