2016-09-02 3 views
1

Ich bin Spinner Werte von Web-Service hinzufügen. Was ich möchte, ist einen Hinweis wie in Editiertext hinzufügen, etwas wie "Wählen Sie Ihr Land". Ich habe versucht, einen benutzerdefinierten Adapter zu verwenden, aber es war nicht erfolgreich. Gibt es einen guten Weg, dies zu tun?Hinweis zu Spinner android hinzufügen

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

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

+0

Ich habe den Code des ersten Links in meinem benutzerdefinierten Adapter verwendet, aber die App ist abgestürzt. – Sammy

+0

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

Antwort

0

Ich habe dies kürzlich in meinem Projekt implementiert. Einfach haben Sie zu tun ist, bevor position von Arraylist in Ihren arraylist Pass „Select Item“ bevölkert und es dann mit data.After dann in Ihrem Spinner Adapter überschreibt folgende Methoden-

@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; 
     } 
    }; 

Sie bevölkern kann Beispiel here sehen.