2015-05-19 10 views
7

mio progetto Android Costruire target è 5.1.1 API 22Spinner malfunzionamenti sulla Lollipop

Questa applicazione sembra funzionare per tutte le versioni del sistema operativo, tranne Lollipop. Lollipop ristruttura l'altezza di alcune attività (annullando il layout scorrevole) e disturba i filatori.

Fare clic su una posizione specifica su una casella di selezione immetterà una posizione diversa nell'app. Non sono sicuro del perché e non so come risolvere questo problema. In alcuni casi, anche se si fa clic su un pulsante sulla casella di selezione, viene registrato il pulsante più visibile in basso sulla casella di selezione. Per alcuni spinners, non permetterà all'utente di scorrere affatto.

Uno dei miei codici filatore malfunzionamento è come questo:

ArrayAdapter<String>adapterl4 = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_item,hbmlevel){ 
      public boolean isEnabled(int position){ 
       displayData(position); 
       return true; 
      } 
     }; 
selecthbm = (Spinner)findViewById(R.id.selecthbmlvl); 
adapterl4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
selecthbm.setAdapter(adapterl4); 
selecthbm.setOnItemSelectedListener(this); 

Ho provato anche utilizzando una variabile globale per la funzione displayData ma ho ancora ottenere gli stessi risultati.

L'applicazione è un'applicazione molto semplice che è possibile scaricare here ed è in esecuzione a livello Java Compiler conformità 1.7

L'inizio della mia XML assomiglia a questo:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:fillViewport="true" 
    android:background="#C2DFFF"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

displayData:

public void displayData(int pos){ 

    herolvlTV.setText(hbmherolvl[pos]); 
    hbmshardTV.setText(getResources().getString(R.string.shards)+" " +String.valueOf(hbmshards[pos])); 
    hbmexpTV.setText(getResources().getString(R.string.maxexp)+" " +String.valueOf(hbmmaxexp[pos])); 
} 
+0

Qual è il metodo 'displayData' lo fa? – fRoStBiT

+0

@fRoStBiT Basta impostareText per alcune visualizzazioni di testo – krikara

+0

Perché lo stai facendo in 'isEnabled()'? Dovresti farlo in 'getView()'. – fRoStBiT

risposta

3

Ecco il problema:

ArrayAdapter<String>adapterl4 = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_item,hbmlevel){ 
      public boolean isEnabled(int position){ 
       displayData(position); 
       return true; 
      } 
     }; 

La funzione isEnabled semplicemente non funziona su Lollipop. La soluzione è di cambiare selecthbm.setOnItemSelectedListener(this); in selecthbm.setOnItemSelectedListener(new OnItemSelectedListener(){...}); e rimuovere la funzione isEnabled nella sua interezza.

Non so perché la funzione isEnabled non funziona comunque. Se qualcuno vuole fornire una spiegazione, posso assegnare la taglia.