2014-10-14 17 views
6

Guardando la risposta here, ho avuto problemi sulla linea:getStyledAttributes annotato con @StyleableRes. Sopprimere le avvertenze

TypedArray ta = obtainStyledAttributes(R.style.MyCustomStyle, attrs); 

Sembra che Android Studio non mi permette di passare in un int che non proviene da una risorsa R.styleable senza avvertimenti.

Mi dice che si aspetta una risorsa di tipo styleable, che presumo significa che il codice sto chiamando è stato annotato con la @StyleableRes annotation

Expected resource of type styleable

Quale sarebbe il miglior modo di agire leggere i valori definiti nello stile R. {x}? La risposta accettata sul post collegato funziona e compila, ma non so come sopprimere l'avviso. Come c'è un avvertimento, è sicuro da sopprimere? Se é cosi, come?

+0

Un 'styleable' non è un' stile' – Blackbelt

+0

@blackbelt corretto. Ecco perché sono confuso dal fatto che la risposta accettata (generosità!) Nella domanda a cui mi riferisco stia usando uno stile e abbia così tanti voti positivi. –

+0

infatti è solo un avvertimento, hai eseguito il tuo codice? – pskink

risposta

9

Penso che il modo corretto di sopprimere questo:

@SuppressWarnings("ResourceType") 

che sto offerto questo quando si preme Alt-Invio per far apparire le correzioni per l'avvertimento e scegli opzioni di ispezione 'costante e tipo di risorsa disallineamenti'>Sopprimere per la classe (schermata allegata) enter image description here.

Funziona per me.

È possibile che l'ID per questa ispezione sia cambiato da quando è stato scritto il codice che si stava riferendo; Ho esaminato brevemente i registri di commit ma non sono riuscito a trovare un riferimento.

+0

Grazie per la risposta. Ho soppresso quell'avvertimento specifico ora. È sicuro disattivare l'avviso (suppongo che sia un avvertimento per un motivo)? –

+0

Potrebbe non essere necessario disattivarlo ovunque in qualsiasi momento. Nonostante questo errore, segnala un errore di programmazione facile da eseguire ma difficile da diagnosticare. –

+0

Stabilisci che la soppressione del metodo è sufficiente e più sicura .. non c'è bisogno di portarla in giro per l'intera classe .. –

0

È possibile sopprimere il controllo dell'avviso con @SuppressWarnings("ResourceType") per il metodo in cui si è verificato il problema oppure è possibile utilizzare //noinspection ResourceType appena prima di tale riga per evitare l'ispezione solo in quella riga di codice.

Problemi correlati