Autore Topic: Cambiare altezza ListView da codice  (Letto 1290 volte)

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Cambiare altezza ListView da codice
« il: 09 Gennaio 2012, 15:14:18 CET »
0
Ciao a tutti,
ho settato una listview con altezza pari a 150dp tramite XML.

Ora vorrei che se nella listview sono presenti meno di 5 elementi, l'altezza della listview passi da 150dp a WRAP_CONTENT

Codice: [Seleziona]
ListView List = (ListView) findViewById (R.id.fermateListView);

if(num_fermate <5)
            {
                    List.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            }

ho provato così ma l'app si impasta....
avete qualche idea di come risolvere il problema?

Grazie
Mattia
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Cambiare altezza ListView da codice
« Risposta #1 il: 11 Gennaio 2012, 13:23:51 CET »
0
questa riga funziona perfettamente su un linearlayout:
Codice (Java): [Seleziona]
linearlayout1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ));ma per la ListView mi sembra che non si possano settare le dimensioni..magari qualcun'altro ha una soluzione migliore :D
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Cambiare altezza ListView da codice
« Risposta #2 il: 11 Gennaio 2012, 14:50:57 CET »
0
ho provato a ingannare il codice  :-), mettendo la listView dentro un linearLayout in questo modo:

Codice: [Seleziona]
<LinearLayout
                                android:id="@+id/LLayout01"
                                android:layout_width="wrap_content"
                                android:gravity="center"
                                android:layout_below="@+id/Ilinea"
                                android:layout_height="150dp">
                        <ListView
                                android:id="@+id/fermateListView"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"       
                                android:clickable="false"
                                android:soundEffectsEnabled="false"
                                android:focusableInTouchMode="false"
                                android:focusable="false"
                                android:divider="@android:color/transparent"
                                android:hapticFeedbackEnabled="false"
                                android:background="@android:color/transparent">
                        </ListView>
                </LinearLayout>

Però una volta che cerco di modificare l'altezza della LinearLayout
Codice: [Seleziona]
                            if(num_fermate <5)
                            {
                                    LinearLayout Ll=(LinearLayout) findViewById (R.id.LLayout01);
                                    Ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, num_fermate*30));
                            }

l'app si blocca ugualmente

Suggerimenti?
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Cambiare altezza ListView da codice
« Risposta #3 il: 11 Gennaio 2012, 18:00:56 CET »
0
prova a postare il logcat..
cmq penso che il motivo sia il modo in cui richiami le dimensioni..confronta la mia riga(testata e funzionante):
Codice (Java): [Seleziona]
Codice (Java): [Seleziona]
linearlayout1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ));
con la tua:
Codice (Java): [Seleziona]
Ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, num_fermate*30));prova cosi:
Codice (Java): [Seleziona]
  if(num_fermate <5)
                            {
                                    LinearLayout Ll=(LinearLayout) findViewById (R.id.LLayout01);
                                    Ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,  LinearLayout.LayoutParams.MATCH_PARENT));
                            }
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Cambiare altezza ListView da codice
« Risposta #4 il: 11 Gennaio 2012, 18:30:37 CET »
0
Grazie per l'aiuto! Purtroppo non funziona neanche con il codice che mi hai postato.   :'(
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Cambiare altezza ListView da codice
« Risposta #5 il: 11 Gennaio 2012, 18:52:43 CET »
+1
posta il logcat dell'errore, cosi si può vedere dove e' il problema
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Cambiare altezza ListView da codice
« Risposta #6 il: 11 Gennaio 2012, 23:18:38 CET »
+1
questa cosa mi ha incuriosito...e la ho testata :D
il codice che ti avevo postato funziona perfettamente..lo ho testato in questa app,ti metto il codice cosi puoi testarlo:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#000000"
   android:orientation="vertical" android:padding="2px">
<Button
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Button" />
<LinearLayout
   android:id="@+id/lay"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#FFFFFF"
   android:orientation="vertical">

    <ListView
       android:id="@+id/list"
       android:layout_width="match_parent"
       android:layout_height="match_parent" android:background="#abd0bc">
    </ListView>

</LinearLayout>
</LinearLayout>

java:
Codice (Java): [Seleziona]
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;

public class prima extends Activity {
   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button image =(Button)findViewById(R.id.button1);

    String[] cols = new String[]{"Elemento 1", "Elemento 2", "Elemento 3",
    "Elemento 4"};
    ListView list1 = (ListView)this.findViewById(R.id.list);
    ListAdapter adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, cols);
    list1.setAdapter(adapter);

   

    image.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event){

            LinearLayout Ll = (LinearLayout)findViewById(R.id.lay);
                if(event.getAction()==MotionEvent.ACTION_DOWN){
  Ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ));

                    return true;
                }
                if(event.getAction()==MotionEvent.ACTION_MOVE){
                       
                    return true;
                }
                if(event.getAction()==MotionEvent.ACTION_UP){

  Ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

                    return true;
                }      
                return false;
        }
    });

 }



}

con questo codice, quando premi il bottone, il layout si rimpicciolisce (wrap_content), invece quando rilasci il bottone torna grande (match_parent).
io te lo ho messo con il bottone, poi vedi tu come adattarlo al tuo codice ^^
« Ultima modifica: 11 Gennaio 2012, 23:20:42 CET da frecciak »
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Cambiare altezza ListView da codice
« Risposta #7 il: 11 Gennaio 2012, 23:41:52 CET »
0
Ciao,
grazie mille!
domani lo provo e ti faccio sapere se sono riuscito a farlo funzionare.

Grazie ancora!
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Cambiare altezza ListView da codice
« Risposta #8 il: 12 Gennaio 2012, 10:01:12 CET »
0
Riprovato e non andava, al che ho guardato le differenze fra il tuo codice e il mio. E l'unica differenza era che il mio linearLayout era racchiuso in un RelativeLayout. E questo faceva scattare l'errore.


Il log infatti era questo:
Codice: [Seleziona]
01-12 09:48:28.649: E/AndroidRuntime(21168): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.RelativeLayout$DependencyGraph.findRoots(RelativeLayout.java:1303)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.RelativeLayout$DependencyGraph.getSortedViews(RelativeLayout.java:1250)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.RelativeLayout.sortChildren(RelativeLayout.java:281)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:303)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.View.measure(View.java:8313)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.View.measure(View.java:8313)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.View.measure(View.java:8313)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.View.measure(View.java:8313)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.View.measure(View.java:8313)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.ViewRoot.performTraversals(ViewRoot.java:845)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1866)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.os.Handler.dispatchMessage(Handler.java:99)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.os.Looper.loop(Looper.java:123)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at android.app.ActivityThread.main(ActivityThread.java:3687)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at java.lang.reflect.Method.invokeNative(Native Method)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at java.lang.reflect.Method.invoke(Method.java:507)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-12 09:48:28.649: E/AndroidRuntime(21168):         at dalvik.system.NativeStart.main(Native Method)

è bastato togliere la listview dal relativeLayout. Adesso mi permette di modificarla sia inserendo la nuova altezza in termini di "WARP_CONTEST" ecc, che in termini generali indicando il numero di pixel.

Un grazie caloroso a frecciak che mi ha permesso di arrivare alla conclusione!

Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:Cambiare altezza ListView da codice
« Risposta #9 il: 12 Gennaio 2012, 12:26:12 CET »
0
con tutto l'aiuto che ho ricevuto da questo forum...nel mio piccolo cerco di restituirne un pò :D
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!