È buona o cattiva pratica creare stili di righe alternative (ad esempio: colore di sfondo alternativo) in ListView utilizzando xml separato?

0

Ad esempio, per creare un layout alternativo in ListView che utilizza diversi colori alternativi:

<LinearLayout
    android:id="@+id/view1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:id="@+id/textview_publish_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </TextView>
</LinearLayout>

Posso impostare il colore nel metodo getView:

MyActivity.this.findViewById(R.id.view1).setBackgroundColor(position%2=0?Color.RED.Color.BLUE); 

Ma preferirei copiare e posizionare lo stesso file di layout:

row_style1.xml

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FF0000"
    android:orientation="vertical">
    <TextView
        android:id="@+id/textview_publish_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </TextView>
</LinearLayout>

row_style2.xml

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#0000FF"
    android:orientation="vertical">
    <TextView
        android:id="@+id/textview_publish_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </TextView>
</LinearLayout>

e quindi gonfia layout diversi con il metodo getView:

view=LayoutInflater.from(MyFragment.this.getActivity()).inflate(i%2==0?R.layout.row_style1:R.layout.row_style2,null);

Penso che sia più gestibile perché separa più aspetti di stile dal codice, specialmente quando ci sono più stili diversi tra parti diverse, ad esempio:

findViewById(R.id.view1).setBackgroundColor(position%2=0?Color.RED.Color.BLUE);
findViewById(R.id.view2).setBackgroundColor(position%2=0?Color.YELLOW.Color.GREEN);  

che può essere semplificato gonfiando diversi layout. È buona o cattiva pratica farlo?

    
posta ggrr 04.08.2017 - 07:22
fonte

1 risposta

0

In generale, se è ragionevole aspettarsi che la struttura generale di ogni riga rimanga la stessa in entrambi i casi, quindi introducendo la ripetizione (due file di layout separati ma simili), si introduce anche una dipendenza tra due (è necessario ricordare di cambiare entrambi i file ogni volta). Se si considerano solo i file di layout da soli, è meno gestibile. Ma potresti essere disposto a pagare quel costo se ti procura qualche altro vantaggio di design sufficientemente prezioso. (Come nota a margine: quando si tratta di buone o cattive pratiche, cerca di capire il "perché" dietro di loro: una volta che lo fai, puoi decidere se hanno senso per il tuo caso particolare. essere sempre in grado di farlo, ma è una buona idea provare.)

Potresti anche usare un singolo file di layout, che lascia android:background non definito. Quindi definirai i due colori come risorse (in res/values/colors.xml ) e impostarli dal codice, sia ottenendo viste preesistenti come prima, o gonfiando il layout singolo, e quindi impostando il colore di sfondo sulla vista risultante. In questo modo eviti di avere due file di layout codipendenti e eviti di codificare i colori di sfondo.

Un altro approccio sarebbe (dovrei menzionare) per creare un componente personalizzato, in cui avresti il pieno controllo, ma in questo caso probabilmente non vale la pena.

    
risposta data 04.08.2017 - 11:38
fonte

Leggi altre domande sui tag