2016-09-02 9 views
1

Webサービスからスピナー値を追加します。私が望むのは、 "あなたの国を選択"のような、edittextのようなヒントを加えることです。私はカスタムアダプターを使ってみましたが、成功しませんでした。これを行う良い方法はありますか?スピナーにヒントを追加します。android

public class MainActivity extends AppCompatActivity { 

    private EditText card_number_et, cvv_et, card_holder_name_et, multiline_et, postcode_et; 
    private Spinner country_spin, state_spin, city_spin; 
    private Button pay_btn; 
    static EditText expiry_date_et; 
    private ArrayAdapter adapter, adapter1, adapter2, adapter3; 
    private ArrayList<String> namelist = new ArrayList<>(); 
    private ArrayList<String> idlist = new ArrayList<>(); 
    private HashMap<String,String> spinnerMap1, spinnerMap2, spinnerMap3; 
    private String countryid, stateid, cityid; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     country_spin = (Spinner)findViewById(R.id.country_spin); 
     state_spin = (Spinner)findViewById(R.id.state_spin); 
     city_spin = (Spinner)findViewById(R.id.city_spin); 

     card_number_et = (EditText)findViewById(R.id.card_number_et); 
     expiry_date_et = (EditText)findViewById(R.id.expiry_date_et); 
     cvv_et = (EditText)findViewById(R.id.cvv_et); 
     card_holder_name_et = (EditText)findViewById(R.id.card_holder_name_et); 
     multiline_et = (EditText)findViewById(R.id.multiline_et); 
     postcode_et = (EditText)findViewById(R.id.postcode_et); 

     pay_btn = (Button)findViewById(R.id.pay_btn); 




     expiry_date_et.setOnClickListener(new View.OnClickListener() { 
      @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
      @Override 
      public void onClick(View v) { 


       DatePickerFragment date = new DatePickerFragment(); 
       date.show(getFragmentManager(), "Date"); 

      } 
     }); 



     country_spin.setPrompt("Select your country"); 
     state_spin.setPrompt("Select your state"); 
     city_spin.setPrompt("Select your city"); 

     getCountryList(); 


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

       String countryname = country_spin.getSelectedItem().toString(); 
       System.out.println("somucountryname"+" "+countryname); 
       countryid = spinnerMap1.get(countryname); 
       System.out.println("somucountrynameid"+" "+countryid); 
       if(countryid != null && !countryid.trim().isEmpty()){ 
        getStateList(countryid); 
       } 

      } 

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

      } 
     }); 

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

       String statename = state_spin.getSelectedItem().toString(); 
       System.out.println("somustatename"+" "+statename); 
       stateid = spinnerMap2.get(statename); 
       System.out.println("somustateid"+" "+stateid); 
       if(stateid != null && !stateid.trim().isEmpty()){ 
        getCityList(stateid); 
       } 

      } 

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

      } 
     }); 

     pay_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       makepayment(); 
      } 
     }); 



    } // onCreate ends 


    private void getCountryList() { 

     if(namelist!=null)namelist.clear(); 
     if(idlist!=null)idlist.clear(); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.example.com/webservice/allreligionlisting", 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 


         try { 
          JSONObject jObj = new JSONObject(response); 
          JSONArray jArray = jObj.getJSONArray("all_country"); 
          for(int i=0;i<jArray.length();i++){ 
           JSONObject main = jArray.getJSONObject(i); 

           namelist.add(main.getString("name")); 
           idlist.add(main.getString("code")); 

           String[] spinnerArray = new String[idlist.size()]; 
           spinnerMap1 = new HashMap<>(); 
           for (int j = 0; j < idlist.size(); j++) 
           { 
            spinnerMap1.put(namelist.get(j),idlist.get(j)); 
            spinnerArray[j] = namelist.get(j); 
           } 

           adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, spinnerArray); 
           adapter.setDropDownViewResource(R.layout.spinnerlayout); 
           country_spin.setAdapter(adapter); 
          } 




         } catch (JSONException e) { 
          // JSON error 
          e.printStackTrace(); 
          Toast.makeText(MainActivity.this, "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(MainActivity.this, "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 

      } 
     }) { 
      /*@Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 


       return params; 
      }*/ 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); 
     requestQueue.add(stringRequest); 


    } 

    private void getStateList(final String countryId) { 

     if(namelist!=null)namelist.clear(); 
     if(idlist!=null)idlist.clear(); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.example.com/webservice/allstate/"+countryId, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 


         try { 
          JSONObject jObj = new JSONObject(response); 

          if(jObj.getString("ACK").equals("1")){ 

           JSONArray jArray = jObj.getJSONArray("all_state"); 
           for(int i=0;i<jArray.length();i++){ 
            JSONObject main = jArray.getJSONObject(i); 

            namelist.add(main.getString("name")); 
            idlist.add(main.getString("id")); 

            String[] spinnerArray = new String[idlist.size()]; 
            spinnerMap2 = new HashMap<>(); 
            for (int j = 0; j < idlist.size(); j++) 
            { 
             spinnerMap2.put(namelist.get(j),idlist.get(j)); 
             spinnerArray[j] = namelist.get(j); 
            } 

            adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, spinnerArray); 
            adapter.setDropDownViewResource(R.layout.spinnerlayout); 
            state_spin.setAdapter(adapter); 
           } 

          } 






         } catch (JSONException e) { 
          // JSON error 
          e.printStackTrace(); 
          Toast.makeText(MainActivity.this, "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(MainActivity.this, "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 

      } 
     }) { 
      /*@Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 


       return params; 
      }*/ 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); 
     requestQueue.add(stringRequest); 


    } 

    private void getCityList(final String stateId) { 

     if(namelist!=null)namelist.clear(); 
     if(idlist!=null)idlist.clear(); 

     StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.example.com/webservice/allcity/"+stateId, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 


         try { 
          JSONObject jObj = new JSONObject(response); 

          if(jObj.getString("ACK").equals("1")){ 
           JSONArray jArray = jObj.getJSONArray("all_city"); 
           for(int i=0;i<jArray.length();i++){ 
            JSONObject main = jArray.getJSONObject(i); 

            namelist.add(main.getString("name")); 
            idlist.add(main.getString("id")); 

            String[] spinnerArray = new String[idlist.size()]; 
            spinnerMap3 = new HashMap<>(); 
            for (int j = 0; j < idlist.size(); j++) 
            { 
             spinnerMap3.put(namelist.get(j),idlist.get(j)); 
             spinnerArray[j] = namelist.get(j); 
            } 

            adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_spinner_item, spinnerArray); 
            adapter.setDropDownViewResource(R.layout.spinnerlayout); 
            city_spin.setAdapter(adapter); 
           } 
          } 






         } catch (JSONException e) { 
          // JSON error 
          e.printStackTrace(); 
          Toast.makeText(MainActivity.this, "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); 
         } 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(MainActivity.this, "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 

      } 
     }) { 
      /*@Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 


       return params; 
      }*/ 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); 
     requestQueue.add(stringRequest); 


    } 




} 
+2

参照http://stackoverflow.com/questions/6602339/android-spinner-hintまたはhttp://stackoverflow.com/questions/867518/how-to-make-an-android-spinner-with-initial- text-select-one – Rich

+0

カスタムアダプターで最初のリンクのコードを使用しましたが、アプリがクラッシュしました。 – Sammy

+0

http://stackoverflow.com/questions/867518/how-to-make-an-android-spinner-with-initial-text-select-one –

答えて

0

最近私のプロジェクトでこれを実装しました。単にあなたはmethods-

@Override 
     public boolean isEnabled(int position){ 
      if(position == 0) 
      { 
       // Disable the first item "Select Item" from Spinner 
       // First item will be use for hint 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
     @Override 
     public View getDropDownView(int position, View convertView,ViewGroup parent) { 
      View view = super.getDropDownView(position, convertView, parent); 
      TextView tv = (TextView) view; 
      if(position == 0){ 
       // Set the hint "Select Item" text color gray 
       tv.setTextColor(Color.GRAY); 
      } 
      else { 
       tv.setTextColor(Color.BLACK); 
      } 
      return view; 
     } 
    }; 

あなた次のArrayListの positionであなたのarraylistパス「選択項目」を投入する前に、ある行い、その後、あなたのスピナーアダプタオーバーライドで、その後data.Afterを移入する必要があります例hereを参照してください。

関連する問題