2016-10-10 8 views
1

いつものように、ID項目のクリックのリスナーリターンに適用されます: - :これは私のJSON responceで1

-

{ 
    "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"); } } 

これは私がautocompletetextviewにそれを設定しています私のアダプタである: -

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(); 


      } 
     }); 

私の問題はいつものid 1.Iは私json.Can誰がどのようにすることができますを教えて示さごとにそれに応じて状態へのidにしたいID 1 always.iを取得しているit.butにonitemclickのリスナーを適用しています返すautocompletetextviewです私はこれを達成する??

答えて

0

コードでは、onItemClickコールバックで返されるiが使用されます。このコールバックは、元のリストではなく、自動補完リストの表示アイテムからクリックしたアイテムを参照します。オートコンプリートリストの最初の項目をクリックすると、i=0と表示されます。つまり、「Andaman and Nicobar Island」という項目がStateId=1になります。

私の頭の上から外して、mAdapterからアイテムの文字列を取得し、それをmpojoStateListと比較し、対応するアイテムを見つけることができます。あなたのPojoStateオブジェクトの内部、あなたのtoString()メソッドをオーバーライドして、それがmStateNameを返すようにし、3 ArrayListsを加えることなく、アダプタに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. 
       } 
      } 
     } 
    }); 

がまた良いです(サンプルコードを確認してください)。そうすれば、mAdapter.getItem(i)はStringの代わりにPojoStateオブジェクトを返し、返された位置(i)を参照せずにそのIDを使用できます。

+0

人以上!あなたの貴重な情報のためにそれほど多くの! – LoveAndroid

関連する問題