2016-09-21 2 views
0

私は2つのspinner.one国名を表し、他の1つはarea name.iを表します。私は国スピナーをクリックすると、私は私のjsonごとにインドを選択するように例として一つの国を選択します。その地域のスピナーでは、その国に関連する領域のみを表示する必要があります。たとえば、インドを選択すると、インド領域のみが表示されます。しかし、私の場合は全領域が表示されます。しかし、私はそれを望んでいません。私はそれがその国の特定の地域を示していることを望みます。私はモデルクラスでこれをやろうとしました。国を取得するときは、nullを返すonCreateOptionsMenu()メソッドコードを参照してください。私はこのことをどうやって行うことができるのか分かりません。ArrayListは、スピナーアダプタで設定するとnullを返しますか?

これは私のJSONです: -

{ 
     "Status": 1, 
     "StatusMessage": "Country and Country Area List", 
     "data": [ 
     { 
      "CountryID": "1", 
      "CountryName": "India", 
      "CountryArea": [ 
      { 
       "CountryID": "1", 
       "AreaID": "1", 
       "AreaName": "Kuwait City(Capital)" 
      }, 
      { 
       "CountryID": "1", 
       "AreaID": "2", 
       "AreaName": " Hawally" 
      }, 
      ] 
     }, 
     { 
      "CountryID": "2", 
      "CountryName": "Dubai", 
      "CountryArea": [ 
      { 
       "CountryID": "2", 
       "AreaID": "6", 
       "AreaName": " Jeddah" 
      }, 
      { 
       "CountryID": "2", 
       "AreaID": "7", 
       "AreaName": " Riyadh" 
      }, 
      ] 
    } 
    ] 
} 

これは私がJSONをパースしています方法である: -

public void requestDataCountry() { 


     mProgressDialog.show(); 
     StringRequest countrylistrequest = new StringRequest(Request.Method.GET, GlobalData.COUNTRYLISTURL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 

          mProgressDialog.dismiss(); 

          final JSONObject jObject = new JSONObject(response); 


          if (jObject.getString("Status").equals("1")) { 

           JSONArray jsonArray = jObject.getJSONArray("data"); 

           for (int i = 0; i < jsonArray.length(); i++) { 

            JSONObject jsonObject = jsonArray.getJSONObject(i); 
            mCountryName = jsonObject.getString("CountryName"); 

            mId = jsonObject.getString("CountryID"); 
            getCountryId.add(mId); 

            pojoCityArea.setCountryName(mCountryName); 
            JSONArray jsonArray1 = jsonObject.getJSONArray("CountryArea"); 
            for (int j = 0; j < jsonArray1.length(); j++) { 

             JSONObject jsonObject1 = jsonArray1.getJSONObject(j); 
             areaID = jsonObject1.getString("AreaID"); 
             getAreaId.add(areaID); 
             mAreaName = jsonObject1.getString("AreaName"); 
             mAreaList.add(mAreaName); 

            } 


            pojoCityArea.setCountryName(mCountryName); 

            pojoCityArea pojocityarea = new pojoCityArea(); 
            pojoCityArea.setCountryName(mCountryName) 
            pojoCityArea.setAreaList(mAreaList); 
            mPojoCityAreaList.add(pojoCityArea); 


           } 

           countryAdapter.notifyDataSetChanged(); 

          } else { 

          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 
         Log.e("error:", "" + volleyError.getMessage()); 
         if (volleyError.getMessage() == null) 
          requestDataCountry(); 


        } 
       }) { 


     }; 

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

     countryqueue.add(countrylistrequest); 

    } 

これは私が設定フラグメントのonCreateOptionsMenu()メソッドでありますスピナー(国と地域): -

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.menu, menu); 
     super.onCreateOptionsMenu(menu, inflater); 


     this.menu = menu; 
     MenuItem menuItem = menu.findItem(R.id.menu_spinner).setVisible(true); 
     mCountrySpinner = (Spinner) MenuItemCompat.getActionView(menuItem); 


     for (PojoCityArea pojoCityArea : mPojoCityAreaList) { 
      mCountryList.add(pojoCityArea.getCountryName()); 

     } 


     countryAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, mCountryList); 

     countryAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     mCountrySpinner.setAdapter(countryAdapter); 


     mCountrySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       mCountrySerachId = getCountryId.get(position); 
       mEditor.putString(KEY_COUNTRY_ID, mCountrySerachId); 
       mEditor.commit(); 

       ArrayAdapter<String> areaAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1, mPojoCityAreaList.get(position).getAreaList()); 
       areaAdapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1); 
       mSpinnerArea.setAdapter(areaAdapter); 
       mSpinnerArea.setTitle("Choose your area"); 



      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 


    } 
+0

投稿するlogcat – SripadRaj

+0

@SripadRaj logcatには何も表示されません。 for(PojoCityArea pojoCityArea:mPojoCityAreaList){ mCountryList.add(pojoCityArea.getCountryName()); }このコードでは、mCountryListの値を表示すると空になります。 – aarav

答えて

0

この問題を解決するにはデータベースを使用することをお勧めします。 まず、すべての国名と国IDを1つのテーブルに挿入し、他のすべての国のエリアを国IDと一緒に別のテーブルに挿入する必要があります。国のスピナーを選択すると、その国に基づいて国IDを渡すだけですデータベースからのid(countryid = 'country_id';のtable1のcountryareanamesを選択します)。それを文字列型のarraylistに格納し、そのarraylistをスピナーに設定します。

関連する問題