Autore Topic: Layout nidificati e aggiunta elementi a runtime  (Letto 1279 volte)

Offline Alhazred

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2 Laser ZE550KL
  • Sistema operativo:
    Windows 10 Home 64bit
Layout nidificati e aggiunta elementi a runtime
« il: 29 Febbraio 2012, 10:11:51 CET »
0
Ho un layout fatto così:
- il layout principale è un LinearLayout che contiene 2 altri layout separati
- in alto c'è un RelativeLayout che contiene alcuni dati testuali (con questo non c'è problema, già realizzato)
- sotto c'è una ScrollView che dovrà a sua volta contenere dei dati presi da un array e ogni posizione dell'array andrà a popolare una riga di questa ScrollView

Non sapendo a priori quanti elementi avrà l'array, devo inserire le righe in questa ScrollView in modo dinamico a runtime.
In altri casi ho usato una ListView, ma queste righe non devono reagire al tocco (neanche cambiare solo colore di sfondo), devono solo essere delle informazioni da leggere.

Ho anche preparato in XML la view per gli elementi di riga, ma non so se e come si possono inserire usando un ciclo for.

Un po' di XML che aiuterà a capire (ho tolto un po' di campi per accorciare il codice

LAYOUT DELLA SCHERMATA (route_details.xml)
Codice: [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/routes_details_view"
           android:layout_width="match_parent"
           android:layout_height="fill_parent"
           android:orientation="vertical" >
           
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="5dp" >
       
               <TextView
                   android:id="@+id/text_routes_details_station_from"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_alignParentLeft="true"
                   android:layout_alignParentTop="true"
                   android:text="@string/text_routes_details_station_from"
                   android:textAppearance="?android:attr/textAppearanceSmall" />
       
               <TextView
                   android:id="@+id/text_routes_details_station_from_value"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_alignBottom="@+id/text_routes_details_station_from"
                   android:layout_toRightOf="@+id/text_routes_details_station_from"
                   android:layout_marginLeft="5dp"
                   android:text="@string/text_routes_details_station_from_value"
                   android:textAppearance="?android:attr/textAppearanceSmall" />
       
                ***** Altri campi a seguire *****
        </RelativeLayout>


        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical">
       
                <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                        android:id="@+id/routes_transfers_list"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:orientation="vertical" >
       

                </RelativeLayout>
       
        </ScrollView>
</LinearLayout>

LAYOUT DELLE RIGHE (route_section.xml) che dovrei inserire nel RelativeLayout routes_transfers_list
Codice: [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp" >

    <TextView
        android:id="@+id/text_route_section_station"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/text_route_section_station"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        android:id="@+id/image_route_section_line"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/text_route_section_station"
        android:contentDescription="@string/text_route_section_line_img_title"
        android:src="@drawable/tstop" />

        ***** altri campi a seguire *****
</RelativeLayout>
Si può a runtime prendere quest'ultimo layout, valorizzarne i campi e metterlo nel RelativeLayout all'interno della ScrollView diverse volte (a seconda della dimensione dell'array) in modo che ogni volta si crei una nuova riga con dati diversi?
« Ultima modifica: 29 Febbraio 2012, 10:13:54 CET da Alhazred »

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #1 il: 29 Febbraio 2012, 11:17:01 CET »
0
Io ho risolto un problema simile utilizzando un TableLayout in modo da costruirmi il layout per come mi serviva, ed in runtime..
 8-)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #2 il: 29 Febbraio 2012, 11:28:37 CET »
0
Io continuerei ad usare la listview anche perchè se non registri un listener di norma non  fa nulla e se usi un layout personizzato della riga al tocco non verrà renderizzata la relativa pressione (evidenziandola) se non esplicitamente implementato da te

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #3 il: 29 Febbraio 2012, 12:22:26 CET »
0
Utilizza una ListView. Per evitare che gli elementi siano cliccabili basta che tu faccia l'override del metodo isEnabled dell'adapter che usi.
Esempio:
Codice (Java): [Seleziona]
Adapter adapter = new Adapter(blablabla) {
                        @Override
                        public boolean isEnabled(int position) {
                                return false;
                        }
                };
In questo modo imposterai ogni elemento della lista come non abilitato e quindi non sarà cliccabile.
(In modo evidente il codice che ho postato non é un codice da copia-incolla, non ti funzionerà cosí com'é. Devi fare l'override nell'adapter che stai usando)
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Alhazred

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2 Laser ZE550KL
  • Sistema operativo:
    Windows 10 Home 64bit
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #4 il: 29 Febbraio 2012, 14:06:52 CET »
0
Ok, lo sto facendo con la ListView, ma mi resta un problema.
Usando SimpleAdapter, per inserire un'immagine dato il nome del file, devo impostare un ViewBinder, lo sto facendo così
Codice: [Seleziona]
adapter.setViewBinder(new ViewBinder() {
        @Override
        public boolean setViewValue(View view, Object data, String textRepresentation) {             
                if(data instanceof Drawable ){
                        ((ImageView)view).setImageDrawable((Drawable)data);
                        return true;
                }else{
                        return false;
                }
        }
});
Sulla setViewValue però ho questi errori:
- The method setViewValue(View, Object, String) of type new SimpleAdapter.ViewBinder(){} must override a superclass method
- implements android.widget.SimpleAdapter.ViewBinder.setViewValue

come li elimino?

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #5 il: 29 Febbraio 2012, 14:48:22 CET »
0
Perchè non implemententi adapter e ci fai quello che vuoi?

Offline Alhazred

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus Zenfone 2 Laser ZE550KL
  • Sistema operativo:
    Windows 10 Home 64bit
Re:Layout nidificati e aggiunta elementi a runtime
« Risposta #6 il: 29 Febbraio 2012, 16:00:43 CET »
0
Ok, risolto.
Grazie a tutti.