Autore Topic: Problema logico matematico  (Letto 1471 volte)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Problema logico matematico
« il: 11 Agosto 2012, 01:29:52 CEST »
0
Ciao a tutti,
ho una situazione del genere: all'interno di una ScrollView tramite un for inserisco uno dopo l'altro una serie di inflater (attualmente per prova 5 o 6, ma potrebbero essere anche 1000+).
Avendo modificato ad hoc la ScrollView per ottenerne una endless, ora avrei un problema: capire il numero di inflater (tutti della stessa misura, width=fill_parent e height=wrap_content) che possono riempire la ScrollView, cosi' da poter usare permettere un minimo di scroll e a permettere l'attivazione della lista endless in caso di scroll down. Il problema e' che proprio non so come fare... nel mio S2 bastano 5 inflater, nell'emulatore (in cui non so ne' la risoluzione ne' i dpi - che credo c'entrino qualcosa) ne servono invece 8...

Come potrei fare per ricavarmi il numero di inflater minimo che ci possono stare?
Spero in qualcue aiuto chiarificatore. Intanto grazie in anticipo :)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Problema logico matematico
« Risposta #1 il: 12 Agosto 2012, 15:42:48 CEST »
0
Nessuna idea?
Pensavo di dividere il valore ottenuto da ScrollView.getHeight() per 75dip(moltiplicato per lo screen density)...che é circa il valore di altezza delle mie righe. Potrebbe essere valida come cosa?

Inviato dal mio GT-I9100 con Tapatalk 2

Offline Il.Socio

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +3
    • marcobellino
    • Mostra profilo
    • Guardian-Mobile
Re:R: Problema logico matematico
« Risposta #2 il: 13 Agosto 2012, 00:25:47 CEST »
0
Pensavo di dividere il valore ottenuto da ScrollView.getHeight() per 75dip(moltiplicato per lo screen density)...che é circa il valore di altezza delle mie righe. Potrebbe essere valida come cosa?
Purtroppo non ti so essere di aiuto in proposito :(
E scusami in anticipo se la mia domanda è ingenua e banale, ma mi stavo chiedendo: non fai prima a provare nell'emulatore e nel cell. se questa soluzione è risolutiva, piuttosto che chiedere nel forum se potrebbe essere una soluzione valida?
In 5 minuti ti togli il dubbio... piuttosto che attendere ore/giorni, sperando di ottenere qualche feedback... o mi sfugge qualcosa?

in cui non so ne' la risoluzione ne' i dpi
Non puoi ricavarli a runtime?
DisplayMetrics | Android Developers
« Ultima modifica: 13 Agosto 2012, 00:39:13 CEST da Il.Socio »

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Problema logico matematico
« Risposta #3 il: 13 Agosto 2012, 01:35:30 CEST »
0
Nel frattempo che ho chiesto, ho continuato a fare numerose prove, ma senza successo.
Chiedevo come ottenere l'altezza perche' proprio non ci son riuscito  >:(
Ho provato .getLayoutParams().height, getHeight, getMeasuredHeight...il primo mi ha restituito come valore -1, gli altri 0.
E ho questa ScrollView di cui non so ricavare l'altezza   :-[

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:Problema logico matematico
« Risposta #4 il: 13 Agosto 2012, 14:45:42 CEST »
+1
Ho provato .getLayoutParams().height, getHeight, getMeasuredHeight...il primo mi ha restituito come valore -1, gli altri 0.
E ho questa ScrollView di cui non so ricavare l'altezza   :-[
per caso cercavi di ricavare ne queste informazioni lanciando i metodi dentro l'onCreate?prova a usarli dentro l' onWindowFocusChanged,attento che questo metodo viene richiamato ogni volta che l' activity prende/perde il focus.
qua trovi le doc: Activity | Android Developers
8y3

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Problema logico matematico
« Risposta #5 il: 13 Agosto 2012, 16:16:45 CEST »
0
per caso cercavi di ricavare ne queste informazioni lanciando i metodi dentro l'onCreate?prova a usarli dentro l' onWindowFocusChanged,attento che questo metodo viene richiamato ogni volta che l' activity prende/perde il focus.
qua trovi le doc: Activity | Android Developers
8y3
Esattamente, li provavo proprio dentro onCreate...ora provero' nella funzione che mi hai consigliato :D

EDIT: purtroppo la situazione e' piu' complicata di quello che mi ero limitato ad illustrare...perche' tale funzione non e' presente nei Fragment, e la classe in cui sto lavorando e' un'estensione di un Fragment... :'(

Esiste qualche altra via?
« Ultima modifica: 13 Agosto 2012, 16:31:42 CEST da Melanogaster »

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Problema logico matematico
« Risposta #6 il: 15 Agosto 2012, 23:14:09 CEST »
0
Qualche altra idea?

Ps: buon ferragosto a tutti anche se volge al termine :)

Inviato dal mio GT-I9100 con Tapatalk 2

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:R: Problema logico matematico
« Risposta #7 il: 17 Agosto 2012, 18:17:04 CEST »
+1
Qualche altra idea?
potresti richiamare un metodo interno al fragment allo scattare del onWindowFocusChanged dell activity in cui è attacato il fragment stesso,è un grezzo ma funziona.8y3
activity:
Codice (Java): [Seleziona]
public class BodyActivity extends FragmentActivity {

        boolean flagNeedMeasure = true;
..........
   @Override
        public void onWindowFocusChanged(boolean focus) {
                super.onWindowFocusChanged(focus);
               
                if(flagNeedMeasure){
                        BodyFragment fragment = (BodyFragment) getSupportFragmentManager()
                                        .findFragmentById(R.id.bodyFragment);

                        if ((fragment != null) && fragment.isInLayout())
                                fragment.getMeasure();

                        flagNeedMeasure=false;
                }
   }
fragment:
Codice (Java): [Seleziona]
public class BodyFragment extends Fragment {
...........
        public void getMeasure() {
                TextView view = (TextView) getView().findViewById(R.id.detailsText);

                view.setText("TextView H=" + view.getMeasuredHeight() + "\nTextView W="
                                + view.getMeasuredWidth());
        }

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Problema logico matematico
« Risposta #8 il: 17 Agosto 2012, 23:01:13 CEST »
0
Grazie per il codice e per il disturbo, veramente notevole e di classe ;)
Appena posso lo provo, e naturalmente metto il thanks!

Inviato dal mio GT-I9100 con Tapatalk 2

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Problema logico matematico
« Risposta #9 il: 18 Agosto 2012, 09:38:03 CEST »
0
Purtroppo temo, ancora una volta, di avere una struttura "atipica" di Fragment.
Infatti non ho nei miei layout nessun widget che richiami la classe Fragment!

Ho solo nel layout main:
Codice: [Seleziona]
<!-- Body -->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
/>

e poi, tramite un for, eseguo una serie di
Codice: [Seleziona]
Fragment myFrag                =        Fragment.instantiate( this , myClass.class.getName() );
fragments.add(myFrag);
Successivamente, trasformo il tutto sotto forma di adapter e lo assegno al pager.

myClass e' una classe il cui layout e' rappresentato da una semplice ScrollView (che poi e' la stessa di cui vorrei stabilire l'altezza).

Quindi al posto di
Codice: [Seleziona]
BodyFragment fragment = (BodyFragment) getSupportFragmentManager().findFragmentById(R.id.bodyFragment);cosa ci dovrei mettere?

EDIT:
ho risolto prendendo il fragment in fragments.get(0) (se presente) e usando poi il tuo codice...e funziona perfettamente :D
Grazie mille!
« Ultima modifica: 18 Agosto 2012, 10:29:27 CEST da Melanogaster »

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 127
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:Problema logico matematico
« Risposta #10 il: 18 Agosto 2012, 10:31:13 CEST »
0
Quindi al posto di
Codice: [Seleziona]
BodyFragment fragment = (BodyFragment) getSupportFragmentManager().findFragmentById(R.id.bodyFragment);cosa ci dovrei mettere?
allora potresti richiamare il fragment tramite Tag e non tramite Id,per assegnare da codice un specifico Tag ad ogni fragment che crei nel ciclo for dovresti fare in questo modo:
Codice (Java): [Seleziona]
.....
Fragment myFrag = Fragment.instantiate( this , myClass.class.getName() );

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();          
fragmentTransaction.add(myFrag, "tag"+NumProgressivo);  // <<<<<--------- ogni tag deve essere unico
......
e poi lo richiami in questo modo:
Codice (Java): [Seleziona]
myClass fragmentTEMP = (myClass) getSupportFragmentManager().findFragmentByTag("tag0");il codice deve essere adattato al tuo caso e comunque i fragment per me sono ancora sconosciuti :p 8y3