Autore Topic: ArrayAdpter per custom layout  (Letto 731 volte)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
ArrayAdpter per custom layout
« il: 17 Gennaio 2011, 05:38:14 CET »
0
Salve dovrei creare una ListView con all' interno un mio custom layout e in questo caso un TableLayout ma ecco il codice.

Partiamo dal main.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/datalist"></ListView>
</LinearLayout>

Ora il custom Layout
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
 
<TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="Name: "
android:id="@+id/TextView01" android:layout_width="wrap_content"
android:layout_height="wrap_content">
 </TextView>
 <TextView android:text=""
android:id="@+id/tName" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="@color/red">
 </TextView>
</TableRow>
<TableRow android:id="@+id/TableRow02" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="Surname: "
android:id="@+id/TextView02" android:layout_width="wrap_content"
android:layout_height="wrap_content">
 </TextView>
 <TextView android:text=""
android:id="@+id/tSurname" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="@color/red">
 </TextView>
</TableRow>
<TableRow android:id="@+id/TableRow03" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="From: "
android:id="@+id/TextView03" android:layout_width="wrap_content"
android:layout_height="wrap_content">
 </TextView>
 <TextView android:text=""
android:id="@+id/tFrom" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="@color/red">
 </TextView>
</TableRow>
<TableRow android:id="@+id/TableRow04" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="Age: "
android:id="@+id/TextView03" android:layout_width="wrap_content"
android:layout_height="wrap_content">
 </TextView>
 <TextView android:text=""
android:id="@+id/tAge" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="@color/red">
 </TextView>
</TableRow>
</TableLayout>

E' un semplice layout che mostra Name, Surname , From, Age.
Bene data una fonte dati vorrei riuscire a creare una serie di Item.

Per la fonte dati vorrei usare un ArrayList di una mia classe, più che altro per simulare un caricamento dati esterni nel senso che una volta ottenuti i dati da un WebService la prima cosa che farei e inserirli in un array.
Ecco la classe
Codice (Java): [Seleziona]
package it.mydomain.android.app.userdata;
 
 
public class UserData {
       
        private String name;
        private String surname;
        private int age;
        private String from;
       
        public UserData(String _name , String _surname, int _age, String _from){
                this.name= _name;
                this.surname= _surname;
                this.age= _age;
                this.from= _from;              
               
        }
       
        public String getName(){
                return name;
        }
       
        public String getSurname(){
                return surname;
        }
       
        public int getAge(){
                return age;
        }
       
        public String getFrom(){
                return from;
        }      
 
}

Ed ecco la classe Activity

Codice (Java): [Seleziona]
package it.mydomain.android.app.userdata;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
 
public class UserDataActivity extends Activity {
       
       
        ArrayList<UserData> allUsers = new ArrayList<UserData>();
        private ListView myListView;
       @Override
       public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myListView= (ListView) findViewById(R.id.datalist);
        createFakeData();  
       
        int resID = R.layout.user_row;
       
       
     // data_adpater = new ArrayAdapter<UserData>(this, R.layout.user_row, allUsers);
       
       myListView.setAdapter(data_adpater);      
       
 
    }
 
 
        //fill ArrayList with fake data
        private void createFakeData() {
       
                UserData first = new UserData("Frank", "Smith", 30, "Chicaco");
                UserData second = new UserData("Tania", "Roger", 20, "Los Angeles");
                allUsers.add(first);
                allUsers.add(second);
        }
}

Mi sono bloccato nel punto dove dovrei recupare le instanze delle TextView. Con createFakeData popolo l' ArrayList di dati fake.


La domanda stupida è quella che non si fa

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:ArrayAdpter per custom layout
« Risposta #1 il: 17 Gennaio 2011, 06:23:02 CET »
0
Ho risolto riutilizzando un tutorial del sito ma non mi piace molto nel senso che mi piacerebbe usare qualcosa di più non dico complesso ma usando un ArrayAdapter custom, cmq ho risolto cosi.
Codice (Java): [Seleziona]
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();

                for (int i = 0; i < allUsers.size(); i++) {
                        UserData p = allUsers.get(i);// per ogni persona all'inteno della
                                                                                        // ditta

                        HashMap<String, Object> personMap = new HashMap<String, Object>();// creiamo
                                                                                                                                                               

                        personMap.put("name", p.getName());
                        personMap.put("surname", p.getSurname());
                                                                                                               
                        personMap.put("age", p.getAge());
                        personMap.put("from", p.getFrom());
                        data.add(personMap);
                }

                int resID = R.layout.user_row;

                String[] from = { "name", "surname", "age", "from" };
                int[] to = { R.id.tName, R.id.tSurname, R.id.tAge, R.id.tFrom };

                data_adpter = new SimpleAdapter(getApplicationContext(), data, resID,
                                from, to);

                myListView.setAdapter(data_adpter);


La domanda stupida è quella che non si fa

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:ArrayAdpter per custom layout
« Risposta #2 il: 17 Gennaio 2011, 07:11:08 CET »
0
Ho usato anche il secondo tutorial più complesso.. e che preferisco.

Non vorrei continuare a commentare il Tutorial ma non capisco perchè in Android non hanno reso tutto ancora più semplice.

Io ho capito questo.
Android mette a disposizione molti Layout ArrayAdapter predefiniti ma per poter usare un custom layout dobbiamo

1) recuperare il position
2) estendere il metodo getView
3) nel metodo esteso dobbiamo recuperare gli id dei vari oggetti Widget  cioè TextView,Button etc.


Non mi pare tanto immediata come procedura, si poteva fare meglio secondo me.





La domanda stupida è quella che non si fa

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayAdpter per custom layout
« Risposta #3 il: 17 Gennaio 2011, 08:28:50 CET »
0
In questo caso mi verrebbe da dirti... leggi la mia firma ;)
Comunque, scherzi a parte, gli adapter sono effettivamente complessi da utilizzare, ma solo perchè sono fatti in modo da essere molto flessibili.
« Ultima modifica: 17 Gennaio 2011, 08:30:38 CET da Ricky` »

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:ArrayAdpter per custom layout
« Risposta #4 il: 17 Gennaio 2011, 13:23:39 CET »
0
Hai ragione, errore da principiante eppure tempo fa ho gestito per anni un forum... bah..

In molti libri questo aspetto è trattato malissimo, ti mostrano solo layout con stringhe e solo Adapter quelli predefiniti.

Eppure penso che sia uno degli aspetti più importanti in android, cioè quello di mostrare i dati che si hanno...


Cmq complimenti per il sito che ho scoperto adesso,  penso di far parte di questa community sia per imparare che per contribuire per quello che posso.

Cosa mi consigli per imparare meglio la problematica degli ArrayAdapter; io avevo pensato di prendere applicazioni famose o esistenti e tentare di ricreare almeno il layout.
La domanda stupida è quella che non si fa

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:ArrayAdpter per custom layout
« Risposta #5 il: 17 Gennaio 2011, 14:03:56 CET »
0
Ciao gsources, benvenuto sul forum!
Ti consiglio, se hai tempo, di guardarti questo video:

    YouTube
        - Google I/O 2010 - The world of ListView
 

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:ArrayAdpter per custom layout
« Risposta #6 il: 17 Gennaio 2011, 14:38:25 CET »
0
Tempo ne ho poco. Mi alzo la.mattina alle 5 per studiare...lo.prenderó come studio
La domanda stupida è quella che non si fa

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ArrayAdpter per custom layout
« Risposta #7 il: 17 Gennaio 2011, 14:50:12 CET »
0
Cosa mi consigli per imparare meglio la problematica degli ArrayAdapter; io avevo pensato di prendere applicazioni famose o esistenti e tentare di ricreare almeno il layout.

Io non la chiamerei problematica.
Per prendere un po' dimestichezza e capirci qualcosa in più sicuramente dare un occhio a codice già scritto ti sarà sicuramente d'aiuto più che leggerti 10 pagine di tutorial. Puoi prenderne uno come base di partenza per scrivere il tuo (Array)Adapter e se hai qualche problema in particolare puoi sempre chiedere qui sul forum ;)