2016-06-06 13 views
0

bekommen ein Problem, die Informationen von meinem Spinner und meinem Kalender zu bekommen, so habe ich es in meiner Tätigkeit eingerichtet. Ich bekomme den Toast (Ergebnis) CodeGA, CodeGD, GareA, GareD, datee alle null Was mache ich falsch?Spinner Ergebnis

private EditText DateEtxt; 
private Spinner spinner1; 
private Spinner spinner2; 
private DatePickerDialog datePickerDialog; 
private SimpleDateFormat dateFormatter; 

String URl; 
String GareA; 
String GareD; 
String CodeGD; 
String CodeGA; 
String datee; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_trajet); 
    dateFormatter = new SimpleDateFormat("dd/MM/yyyy"); 
    dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); 
    DateEtxt = (EditText) findViewById(R.id.etxt_date); 
    DateEtxt.setInputType(InputType.TYPE_NULL); 
    DateEtxt.requestFocus(); 
    DateEtxt.setOnClickListener(this); 
    Calendar newCalendar = Calendar.getInstance(); 
    datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      Calendar newDate = Calendar.getInstance(); 
      newDate.set(year, monthOfYear, dayOfMonth); 
      datee = dateFormatter.format(newDate.getTime()).toString(); 
      DateEtxt.setText(dateFormatter.format(newDate.getTime())); 
     } 
    },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 
    spinner1 = (Spinner)findViewById(R.id.spinner1); 
    spinner2 = (Spinner)findViewById(R.id.spinner2); 
    List<StringWithTag> list = new ArrayList<StringWithTag>(); 

    list.add(new StringWithTag("AEROPORT Med V", "00190")); 
    list.add(new StringWithTag("OUELED RAHOU", "00672")); 
    list.add(new StringWithTag("OUJDA", "00490")); 
    list.add(new StringWithTag("OULAD KHITIB", "00262")); 
    list.add(new StringWithTag("Port Tanger Med", "00291")); 


    ArrayAdapter<StringWithTag> adapter = new ArrayAdapter<StringWithTag>(this,android.R.layout.simple_spinner_item, list); 
    adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
    spinner1.setAdapter(adapter); 
    spinner2.setAdapter(adapter); 

    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      StringWithTag s = (StringWithTag) adapterView.getItemAtPosition(i) ; 
      GareD = s.string.toString(); 
      Object tag = s.tag ; 
      CodeGD = tag.toString(); 
     } 

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

     } 
    }); 
    spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      StringWithTag s = (StringWithTag) adapterView.getItemAtPosition(i) ; 
      GareA = s.string.toString(); 
      Object tag = s.tag ; 
      CodeGA = tag.toString(); 
     } 

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

     } 
    }); 

    URl = "http://www.oncf.ma/Pages/ResultatsHoraire.aspx?depart="+GareD+"&arrivee="+GareA+"&CodeRD=0093&CodeGD="+CodeGD+"&CodeRA=0093&CodeGA="+CodeGA+"&heure=0000&date="+datee; 

} 

public void onSearch (View view) { 
    Toast.makeText(
     Trace.this, URl,Toast.LENGTH_LONG 
    ).show(); 

} 
    @Override 
    public void onClick(View view) { 
     if(view == DateEtxt) { 
      datePickerDialog.show(); 
     } 
    } 

Ich habe eine Klasse StringWithTag jeden Spinner Element eine ID der Code dieser Klasse in Ende ist zu assoziieren

public class StringWithTag { 
public String string; 
public Object tag; 

public StringWithTag(String stringPart,Object tagPart){ 
    string = stringPart; 
    tag = tagPart; 
} 
@Override 
public String toString(){ 
    return string; 
} 
} 

Antwort

0

Statt mit AdapterView, versuchen Sie Ihr ArrayAdapter verwenden.

(StringWithTag)adapter.get(position); 
+0

'' adapter' final' für diese arbeiten –

+0

gemacht werden muss Ich nicht th Ink dies ist, wo der Fehler kam, aber die Variablen verlieren ihre Werte, wenn sie außerhalb der OnSelectedItem –

0

der Spinner getItemAtPosition scheint nicht die Daten zurück es

Ruft die mit der angegebenen Position zugeordneten Daten in der Liste.

Was auch immer das bedeutet. Der wichtige Wert ist die Position, die zurückgegeben wird. Dies ist die Position (2. Wert oder int i in Ihrem Fall) in der Liste und als solche die Position in der Liste, die zum Auffüllen der Spinnerliste verwendet wurde. Alles, was Sie tun müssen, ist, die Daten aus der Liste, die Sie zum Füllen des Spinner verwendet haben, unter Verwendung von i als Offset in die Liste abzurufen.

Allerdings haben Spinner eine andere Eigenart, die Sie möglicherweise ein Problem verursachen. Das heißt, dass die OnItemSelectedListener ausgelöst wird, wenn der Spinner erstellt wird. Daher müssen Sie den Listener möglicherweise erst hinzufügen, nachdem der Spinner erstellt wurde. Sie können dies tun, indem Sie den Listener hinzufügen, wenn das Ereignis des Spinner über ein ausführbares Ereignis ausgelöst wird. Hier ist ein Beispiel (dies wird auch zeigt, mit der Position Wert, es ist für einen Cursor anstatt Liste so verwendet moveToPosition, wo Sie die jeweiligen Listenelement Referenz würde): -

 // Set Spinner's onItemSelectedListener ie to act when an aisle is selected. 
     // Note!!! run on post, as a runnable, so that initial onItemSelected event (at initialisation) is not captured. 
     current_aislelistspinner.post(new Runnable() { 
      @Override 
      public void run() { 
       current_aislelistspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
        @Override 
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
         currentaislelistcursor.moveToPosition(position); 
         currentaisleid = currentaislelistcursor.getLong(ShopperDBHelper.AISLES_COLUMN_ID_INDEX); 
         if(devmode) { 
          Log.d(Constants.LOG,"ACTIVITY: " + THIS_ACTIVITY + " SECTION: Running - AISLELIST OnItemSelectedLIstener" + 
            "- AILSEID Extracted=" + currentaisleid); 
         } 
         currentproductsperaisleecursor = shopperdb.getProductsperAisle(currentaisleid,productsperaislesortorder); 
         current_productsperaislecursoradapter.swapCursor(currentproductsperaisleecursor); 
         current_productsperaislecursoradapter.notifyDataSetChanged(); 
        } 
        @Override 
        public void onNothingSelected(AdapterView<?> parent) { 
        } 
       }); 
      } 
     }); 
+0

Ich habe einen Toast in der Methode OnItemSelected und es funktioniert es zeigt mir den Wert und die ID des Elements ausgewählt, aber wenn es aus ist die Methode onItemSelectedListener die Variable wird null. –

0

, wenn Sie versuchen, zu erhalten Daten aus spinner dh diese auf ausgewählten Wert

public void onItemSelected(AdapterView parent, View v, int position, long id)  { 

select.setText(items[position]); // here trying to set output to text view you can give toast here 

} 

public void onNothingSelected(AdapterView parent) { 

select.setText(""); // if nothing selected 

} 

um weitere Informationen zu besuchen, verwenden Sie [hier] (http://androidcoding.in/2016/02/28/android-tutorial-on-spinner/ "Tutorial auf Spinner")

Verwandte Themen