-3

내 질문은 언제 내가 항상 1로 ID를 반환 autocompletetextview에서 상태를 선택합니다. 하지만 난 내 json에 표시된대로 국가에 따라 이드를 얻고 싶습니다. 예제 (StateName = Assam then StateId = 4). 그러나 나는 항상 1로 ID를 얻고있다. 나는 id를 설정하고 그것으로부터 얻는 모델 클래스를 사용하고있다. 그러나 아무 변화도 없다. 나는 id를 1로 얻는다. 어떻게이 문제를 해결할 수 있는지 알아. 그럼 말해줘. 미리 감사드립니다. Autocompletetextview의 선택한 항목의 ID를 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"); 

     } 
    } 

그리고 이것은 내가 autocompltetextview에 onItemclick의 청취자를 적용하고 내 어댑터입니다 : -

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

코드에서 onItemClick 콜백을 반환하는 i을 사용합니다.이 콜백은 자동 완료 목록의 보이는 항목에서 클릭 한 항목을 나타내며 원래 목록. 자동 완성 목록의 첫 번째 항목 인 i=0을 클릭하면 항상 StateId=1 인 "Andaman 및 Nicobar Island"이 반환됩니다.

내 머리 꼭대기에서 mStateAdapter에서 항목 문자열을 가져와 mpojoStateList과 비교하여 해당 항목을 찾을 수 있습니다. 당신의 PojoState 객체의 내부에, 당신은 당신의 toString() 메소드를 오버라이드 (override)는 mStateName를 반환 할 수 있도록, 3 ArrayLists을 할 필요없이 어댑터에 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. 
       } 
      } 
     } 
    }); 

그것은 또한 더 나은 (샘플 코드를 확인하십시오). 이렇게하면 mStateAdapter.getItem(i)은 String 대신 PojoState 개체를 반환하고 반환 된 위치 (i)를 참조하지 않고 해당 ID를 사용할 수 있습니다.

관련 문제