-3

私の質問は、いつ私はidとして常に1を返すautocompletetextviewから状態を選択します。しかし私は表示されるごとに私のjsonの状態に応じてIDを取得したい。例(StateName = Assam、StateId = 4)。しかし、私は常にidを1として取得しています。私はidを設定してit.butから取得するためにモデルクラスを使用しています。この問題を解決するにはどうすればいいか教えてください。前もって感謝します。Autocompletetextviewの選択項目のIDをアンドロイドで取得する方法は?

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と表示されます。つまり、「Andaman and Nicobar Island」という項目がStateId=1になります。

私の頭の上から外して、あなたはmStateAdapterから項目の文字列を取得し、それをあなたのmpojoStateListと比較し、対応する項目を見つけることができます。あなたのPojoStateオブジェクトの内部、あなたのtoString()メソッドをオーバーライドして、それが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を使用できます。

関連する問題