-3

Мой вопрос в том, когда я выбираю состояние из autocompletetextview, он всегда возвращает 1 как id. но я хочу, чтобы идентификатор соответствовал состоянию, как показано на моем json. Пример (StateName = Assam then StateId = 4). Но я всегда получаю id как 1. Я использую класс модели для установки id и get from it.but нет изменений. Я получаю id как 1. Если кто-то знаю, как я могу решить эту проблему. Тогда, пожалуйста, скажите мне. заранее спасибо.Как получить идентификатор выбранного объекта в Autocompletetextview в android?

This is my jsonResponce :- 

{ 
     "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.setmStateList(mStateList); 
            pojoState.setmStateId(stateId); 
            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"); 

     } 
    } 

И это мой адаптер, где я подаю onItemclick у слушателя на autocompltetextview: -

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

       mpojoStateList.get(i).getmStateId(); 


      } 
     }); 

ответ

0

Ваш код использует i, который возвращает в обратном вызове onItemClick, который ссылается на элемент, который вы нажали, из видимых элементов в списке автозаполнения, а не ваш первоначальный список. Когда вы нажимаете на первый элемент в списке автозаполнения, i=0, что означает, что он всегда возвращает «Андаман и остров Никобар», чей StateId=1.

Сверху моей головы вы можете получить элемент String от mStateAdapter и сравнить его с вашим mpojoStateList и найти соответствующий элемент. (Проверьте код образца)

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

      String itemName = mStateAdapter.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() и сделать его вернуть mStateName и передать mpojoStateList к адаптеру без необходимости сделать 3 ArrayLists. Таким образом, mStateAdapter.getItem(i) вернет объект PojoState вместо строки, и вы можете использовать его ID без ссылки на возвращенную позицию (i).