2016-06-16 9 views
0

Ich möchte den Wert des Elements in einem Spinner in einem AlertDialog abrufen, nachdem Sie die PositiveButton drücken. Meine Funktion:Kann Spinner nicht ausgewähltes Element in einem AlertDialog Android

public void open_and_get() { 
    View dialog_filtri=View.inflate(this,R.layout.finestra_filtri,null); 

    AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setTitle("Filtra per"); 
    builder.setView(dialog_filtri); 
    builder.setCancelable(true); 
    builder.setPositiveButton("Filtra",new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
//All the spinners are inside a Linear layout, so i would like to get it and slide inside his spinner child to get them parameters. 
      View view=(View) LayoutInflater.from(getApplicationContext()).inflate(R.layout.finestra_filtri,null); 
      LinearLayout l= (LinearLayout) view.findViewById(R.id.linear_con_filtri); 
      String[] parametri=new String[l.getChildCount()]; 
      int i; 

      for(i=0;i<l.getChildCount();i++) { 
       if(l.getChildAt(i) instanceof Spinner) { 
        Spinner temp=(Spinner)l.getChildAt(i); 
        parametri[i]=temp.getSelectedItem().toString(); 
       } 
      } 
      Log.d(TAG,""+parametri[0]+"\n"+parametri[1]); 
     } 
    }); 
    builder.setNegativeButton("Cancella",new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog,int id) { 
      dialog.cancel(); 
     } 
    }); 
    builder.show(); 
} 

Das Problem ist, dass ich nur die Standardwerte des Spinners bekommen, vielleicht, weil ich nicht auf die richtigen Spinner beziehen mich aber auf einen neuen.

+0

Ja, es ist, weil Sie ein neues Layout aufblasen. Erstellen Sie ein benutzerdefiniertes Dialogfeld und übergeben Sie das ausgewählte Element in seinem Konstruktor –

Antwort

1

Auf dieser Codezeile,

View view=(View) LayoutInflater.from(getApplicationContext()).inflate(R.layout.finestra_filtri,null); 

Sie aufblasen neue Sicht der Alarm Dialog und verweist darauf, keine Eintagsfliege,

So Linie,

View view=(View) LayoutInflater.from(getApplicationContext()).inflate(R.layout.finestra_filtri,null); 

entfernen Code angezeigt und Änderungslinie,

LinearLayout l= (LinearLayout) view.findViewById(R.id.linear_con_filtri); 

mit

LinearLayout l= (LinearLayout) dialog_filtri.findViewById(R.id.linear_con_filtri);