Autore Topic: ViewPager con N liste ed N tabelle nella actionBar  (Letto 699 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
ViewPager con N liste ed N tabelle nella actionBar
« il: 02 Dicembre 2015, 10:33:06 CET »
0
Salve a tutti!

Con la mia app mi sto ritrovando ad un punto morto: subito avevo creato un ViewPager con all'interno una decina di listview, in seguito ho trovato la cosa non ottimale perché avrei bisogno di un numero N di di listview.
Il problema è che non ho la più pallida idea di come agire, voi avete suggerimenti su come mi posso muovere?
Avevo pensato ad una lista di liste ma mi sembra la cosa più complicata da fare...

Grazie mille in anticipo!

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #1 il: 02 Dicembre 2015, 10:39:03 CET »
0
Non conoscendo nulla dell'applicazione non è che ti si possa dare una soluzione corretta, comunque potresti creare il layout vuoto e prima di mostrarlo crei al volo le listview che ti servono.
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #2 il: 02 Dicembre 2015, 11:07:26 CET »
0
Allora cerco di spiegare un po meglio la mia applicazione.....

L'app si collega al mio db online dove ho delle categorie che vado a scaricare, il problema è che queste categorie non sono fisse ma sono un numero N.

Ogni categoria ha dentro delle info associate a tale categoria che dovrò mostrare in una lista, queste liste devo inserirle in un ViewPager in modo che ,con il gesto swipe, possa guardarle tutte e, tappando su un oggetto, possa entrare nella scheda che mi da info su quell'oggetto.

Quindi io avrei bisogno che ogni volta l'app mi crei dinamicamente il posto per le liste per poi riempirle e renderle consultabili.

Spero di essermi spiegato bene... se hai domande chiedi pure

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #3 il: 02 Dicembre 2015, 11:44:45 CET »
0
Vediamo se ho capito bene:

1) hai una lista di categorie che carichi in una listview, non è necessario sapere a priori quante sono, ci penserà un adapter a caricarle.
2) ogni item della listview (ogni categoria) avrà un evento onclick() che apre una schermata di dettaglio formata da un viewpager che mostrerà tutti i dati della categoria

Se ho capito bene ed è come ho scritto ti basta il layout principale con la listview ed un layout per il dettaglio che usi per ogni categoria.
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #4 il: 02 Dicembre 2015, 11:57:21 CET »
0
Scusa mi sono spiegato malissimo io....è che trovo difficile spiegarlo a parole....

Nelle listview presenti nel viewPager non sono presenti le categorie ma ciò che c'è all'interno delle categorie.

Esempio:

Io ho scarico le categorie fuffa,pisolo e dotto (al momento N=3), nella viewPager visualizzerò la lista di oggetti contenuti in ogni categoria.

Essendo fuffa la prima categoria scaricata visualizzerò una lista di elementi (fuffa1,fuffa2,fuffa3....fuffaN) che se viene cliccata aprirà un scheda con le info del singolo elemento.
Se invece effetto lo swipe a destra visualizzerò la categoria pisolo con una lista di elementi (pisolo1,pisolo2....pisoloN) e via così fino all'ultima categoria che ho scaricato.

purtroppo è un pò complicata da spiegare.....

Offline iClaude

  • Utente normale
  • ***
  • Post: 177
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #5 il: 02 Dicembre 2015, 13:08:25 CET »
0
Puoi utilizzare una ExpandableListview, oppure una Listview di categorie ed aprire ognuna in un Activity diversa.

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #6 il: 02 Dicembre 2015, 13:59:17 CET »
+1
Adesso è più chiaro, certo che però un viewpager potrebbe essere scomodo quando le categorie diventano tante.

Comunque puoi usare il layout principale con il viewpager ed un fragment unico per ogni categoria, in base alla posizione nel viewpager carichi nella listview i dati corrispondenti alla categoria di riferimento.
Questo sempre che i dati contenuti nelle categorie siano omogenei.

Edit:
Avevo usato il viewpager con un numero di pagine fisse, erano solo 6/7 (non ricordo benissimo) ma dopo un po' mi son reso conto che è scomodo doverne scorrere molte per arrivare dove serve.
Pensa magari ad un navigation drawer per le categorie o una listview con click per il dettaglio.

Immagina di dover scorrere 8/10/12 pagine per arrivare ad una categoria...
« Ultima modifica: 02 Dicembre 2015, 14:02:46 CET da LonelyWolf »
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #7 il: 02 Dicembre 2015, 14:05:07 CET »
0
Infatti per risolvere al problema delle molte categorie/pagine pensavo di aggiungere dei tab alla action bar

EDIT:

In pratica stai suggerendo di avere sempre un ViewPager per contenere le liste... ma allo swipe caricare la lista sul momento... giusto?
« Ultima modifica: 02 Dicembre 2015, 14:14:23 CET da ValerioAdo »

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #8 il: 03 Dicembre 2015, 09:02:37 CET »
0
Si, ma se le liste sono tante sencondo me meglio una listview e una schermata di dettaglio
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #9 il: 03 Dicembre 2015, 09:48:10 CET »
0
Purtroppo è una strada che non posso prendere (ordini superiori)....

per ora sto costruendo un codice di questo tipo (non è completo, è per dare una idea):
Codice (Java): [Seleziona]
    Cursor c = Valori.db.rawQuery("SELECT * FROM Categorie", null);//richiamo il db per controllare le categorie salvate

                String FavoritesID[]=new String[c.getCount()];

                int f = 0;

                ListView lista = new ListView(mContext);
                lista.setId(f);

                VetrinaLazyImageLoadAdapter VetrinaAdapter = (VetrinaLazyImageLoadAdapter) lista.getAdapter();
                //aggiungo la lista di vetrina
                if (VetrinaAdapter == null) {
                    VetrinaAdapter = new VetrinaLazyImageLoadAdapter(getActivity(), Valori.mStrings, Valori.Name, Valori.Left, Valori.quantity, Valori.Description, Valori.Comm, Valori.price, Valori.PrezzoOrig);

                    lista.setAdapter(VetrinaAdapter);
                    lista.setDivider(null);
                } else {
                    VetrinaAdapter.refill(Valori.mStrings, Valori.Name, Valori.Left, Valori.quantity, Valori.Description, Valori.Comm, Valori.price, Valori.PrezzoOrig);
                }

                lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//setto le azioni delle liste sul click
                        Intent Next = new Intent(getActivity(), Scheda.class);

                        Bundle extras = new Bundle();

                        extras.putInt("ID", position);
                        extras.putInt("List", 1);
                        Valori.AppClosed = 1;//nel caso apro una scheda ma sto ancora scaricando blocco l'inserimento dei dati nell'adapter


                        Next.putExtras(extras);

                        startActivity(Next);
                        getActivity().finish();
                    }
                });

                pages.add(lista);

                f++;

                //aggiungo la lista dei preferiti
                for (int i = 0; i < FavoritesID.length; i++) {
                    lista = new ListView(mContext);

                    lista.setId(f);

                    new GetItem().execute();

                    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//setto le azioni delle liste sul click
                            Intent Next = new Intent(getActivity(), Scheda.class);

                            Bundle extras = new Bundle();

                            extras.putInt("ID", position);
                            extras.putInt("List", 1);
                            Valori.AppClosed = 1;//nel caso apro una scheda ma sto ancora scaricando blocco l'inserimento dei dati nell'adapter


                            Next.putExtras(extras);

                            startActivity(Next);
                            getActivity().finish();
                        }
                    });

                    pages.add(lista);

                    f++;
                }

                if (Valori.Pager.getAdapter() == null) {//se l'adapter del pager non è presento lo carico nuovo
                    Valori.Pager.setAdapter(adapter);
                } else {//se invece è presente lo aggiorno
                    adapter.update(pages);
                    adapter.notifyDataSetChanged();
                }

                if (Valori.tabs == 1) {//se non sono nella home e vado a settare la posizione della tabella l'app crasha
                    Valori.actionBar.setSelectedNavigationItem(PositionTab);
                }
                Valori.Pager.setCurrentItem(PositionTab);

Ora mi sono scontrato a livello logico con il riempimento delle liste dei preferiti.... perché ovviamente per creare la lista il codice vuole tutto subito (dichiarazione lista,adapter,variabili) però la chiamata è asincrona.... stavo pensando di: o fare un ciclo infinito dopo aver chiamato l'asynk task da cui esce un volta che ha le varibili necessarie a riempire l'adapter (quindi lo libererei nel post execute dell'asynktask stesso).
Oppure usare delle variabili globali per poter creare le liste aggiuntive ecc....
Penso che propenderò per la prima....anche se non mi fa impazzire il dover usare un ciclo infinito (che poi solo virtualmente è infinito) è quello che ritengo forse più gestibile....

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #10 il: 03 Dicembre 2015, 10:32:56 CET »
0
Io farei il primo item con la scritta "Attendere, download dei dati in corso" o qualcosa di simile, appena il task asincrono termina caricamento e refresh; meglio avvisare l'utente che deve aspettare altrimenti potrebbe sembrare in blocco.
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #11 il: 03 Dicembre 2015, 11:32:32 CET »
0
Ci si può pensare....

Ultima domanda:
Con questo metodo nelle variabili che uso mi rimangono solo le info dell'ultima lista di preferiti che ho usato, se magari ho 4 liste e voglio vedere un item della seconda lista come faccio a prendere i dati di quell'item?

al momento sto facendo una prova del genere:
Codice (Java): [Seleziona]
    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//setto le azioni delle liste sul click
                            Intent Next = new Intent(getActivity(), Scheda.class);

                            Bundle extras = new Bundle();

                            // selected item
                            String selected = ((TextView) view.findViewById(R.id.Name)).getText().toString();

                            Toast toast=Toast.makeText(getActivity().getApplicationContext(), selected, Toast.LENGTH_SHORT);
                            toast.show();

                          /*  extras.putInt("ID", position);//preferiti
                            extras.putInt("List", 2);
                            Valori.AppClosed = 1;//nel caso apro una scheda ma sto ancora scaricando blocco l'inserimento dei dati nell'adapter


                            Next.putExtras(extras);

                            startActivity(Next);
                            getActivity().finish();*/

                        }
                    });

Con questo metodo mi prende il nome dell'item su cui ho tappato... ma a me servirebbe l'id dell'item (che non inserisco nella riga)

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #12 il: 03 Dicembre 2015, 14:02:42 CET »
0
Il modo migliore è metterlo nella riga, fai un layout personalizzato per l'item con una textview nascosta che contiene l'id; l'alternativa è fare una ricerca nel db e con solo il nome dovrebbe essere univoco, in ogni caso sempre una query di troppo.
Se la mia risposta ti è utile, per favore un thanks!

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 316
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #13 il: 03 Dicembre 2015, 15:13:05 CET »
0
Ho trovato un metodo migliore!
Nel mio adapter ho aggiunto la variabile per gli ID e sempre nell'adapter ho aggiunto un funzione:
Codice (Java): [Seleziona]
 public String getItemID2(int position){
        return IDs[position];
    }

che poi al click sull'item della lista risolvo così:
Codice (Java): [Seleziona]
String ID= finalLazyAdapter.getItemID2(position);
così non ho bisogno di richiamare nulla ^^

Offline pietroconti89

  • Utente normale
  • ***
  • Post: 164
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note 3 N9005
  • Sistema operativo:
    Windows / Mac OSX
Re:ViewPager con N liste ed N tabelle nella actionBar
« Risposta #14 il: 03 Dicembre 2015, 15:27:58 CET »
0
Tempo a dietro feci una cosa del genere , la organizzai in questo modo
 
-> Activity effettua la chiamata a DB Remoto , dalla quale ottieni un array di tipo stringa con i soli nomi delle categorie -> List<String> categories
-> se la chiamata va a buon fine istanzio la pagerview con il tabStrip passandogli la lista delle categorie nell costruttore dell'adapter dal quale si ricava i titoli e il size delle quantità delle tab che corrisponderà a categories.size();  , diversamente se la chiamta non va a buon fine stampa un msg di errore con relativo errore riscontrato " tipo assenza di categorie o semplicemente mancata connessione "
-> a questo punto mi creo il mio unico fragment a cui passo la stringa contente il titolo della tab , fragment che ovviamente contiene la chimata a DB Remoto con la clausola nella select Where categoria = ' "+variabiletitolo+"'  , se va a buon fine mi farò restituire anche qui una lista contenente i dati che mi interessano e implementerò le varie listview / gridview ecc , se qualcosa sballa , messaggio di errore contente l'errore

il tutto fatto con asyntask cosi da non bloccare nulla  ;-) ed ovviamente effettuando lo swipe tra le varie tab della pagerview ci sarà il contestuale refresh dei dati  :-)