Autore Topic: [Principiante] Singolo metodo su più Views contemporaneamente  (Letto 2518 volte)

Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
[Principiante] Singolo metodo su più Views contemporaneamente
« il: 28 Ottobre 2013, 13:16:56 CET »
0
Salve a tutti! Benvenuti nel mio primo snippet!
Può sembrare banale ai più esperti ma per i principianti (come me) non lo è!
Il codice serve ad usare un metodo su più Views contemporaneamente evitando di dover riscrivere l'intero metodo più volte per ogni View.
Per prima cosa creiamo una nuova classe e dichiariamo il metodo. Io ho usato una terminologia simile a quella delle librerie di Google aggiungendo solo "Multi" in mezzo per semplificare a ricordarli.
Codice (Java): [Seleziona]
public class MultiObjects {

    public void setMultiVisibility(View[] views, int visibility){
        int len= views.length;
        for(int i=0; i<len; i++){
            views[i].setVisibility(visibility);
        }
    }
}
Io usato setVisibility su più View ma è possibile cambiare metodo o view (es. setText su TextView o EditText), a voi la scelta.
Ovviamente è necessario nel MainActivity  creare creare un nuovo oggetto MultiObjects, l'array di view e chiamare il metodo.
Codice (Java): [Seleziona]
MultiObjects multiObjects = new MultiObjects();
View[] views = {view1, view2, view3, ...};
multiObjects.setMultiVisibility(views, View.GONE);
Volendo è possibile mettere più metodi nella stessa classe in modo da non dover istanziarne una diversa per metodo.

Non esitate a correggere errori e a consigliare migliorie!

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Principiante] Singolo metodo su più Views contemporaneamente
« Risposta #1 il: 29 Ottobre 2013, 10:04:25 CET »
+1
mmm si e no, cioè ci sta ma il metodo non è tanto sicuro per più motivi:
1- Visibility non viene controllato, se ti viene passato un valore diverso da VISIBLE,INVISIBLE o GONE fa casini.
2- Non verifichi la condizione di null dell'array o delle view nell'array.
3- Più in generale obblighi qualcuno a passarti un'array, quando esistono le collection che sono molto piu comode e semplici da creare.

Non c'è bisogno di creare un'oggetto per un metodo, la classe fatta cosi non serve a niente.

Inoltre:
Citazione
Volendo è possibile mettere più metodi nella stessa classe in modo da non dover istanziarne una diversa per metodo.
Che vuol dire? il tuo metodo non ha bisogno di stare in OGNI activity, anzi, può stare in una classe a se stante ed essere static (usa SOLO le cose che gli vengono passate).

Per i posteri, una cosa del genere:
Codice (Java): [Seleziona]
public class MultiViewUtils {

    public static void setMultiVisibility(List<View> views, int visibility){

                if (null == views || views.isEmpty() || visibility != View.VISIBLE || visibility != View.GONE || visibility != View.INVISIBLE){
                        return;
                }

                for (View v: views){
                        if (null != v) {
                                v.setVisibility(visibility);
                        }
                }
    }
}

che va richiamato:
Codice (Java): [Seleziona]
List<View> views = new ArrayList<View>();
views. add(view1);
views.add(view2); //....
MultiViewUtils.setMultiVisibility(views,View.GONE)

il metodo di utilità si può addirittura cambiare e fare la firma:
public static void setMultiVisibility(View... views, int visibility)

ma in questo caso non ricordo se i controlli funzionano o se va fatto altro.
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia