Autore Topic: Strano comportamento di una ListView  (Letto 708 volte)

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Strano comportamento di una ListView
« il: 29 Luglio 2011, 12:12:43 CEST »
0
Salve, ho usato le listview con un adapter parecchie volte, ma mai ho riscontrato un problema simile.

Codice (Java): [Seleziona]
public class Sdevice extends Activity {
          private ListView lw;
       
         
          @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                this.requestWindowFeature(Window.FEATURE_NO_TITLE);
                this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN );
                setContentView(R.layout.sdevice);
                lw = (ListView) findViewById(R.id.listadevice);
             
               
              //  Log.w("-->",""+rows.size());
               
               
            //gridview = (GridView) findViewById(R.id.gridStorico);
                lw.setAdapter(new AdapterDevices(this, Util.getDevices()));
           
            }

Util.getDevices() ritorna un ArrayList<BluetoothDevice> e dal log so per certo non essere nullo.

07-29 04:21:28.553: WARN/BroadcastReceiver(20640): Carnauser
07-29 04:21:28.553: WARN/BroadcastReceiver(20640): 00:1C:9A:3E:7F:E3
07-29 04:21:28.553: WARN/AdapterDevices(20640): OK C'E'
07-29 04:21:28.556: WARN/BroadcastReceiver(20640): ->1
07-29 04:21:30.959: WARN/BroadcastReceiver(20640): CARNAMOBILE
07-29 04:21:30.959: WARN/BroadcastReceiver(20640): 00:0E:A1:05:3F:C3
07-29 04:21:30.967: WARN/BroadcastReceiver(20640): ->2

Quel due che vedete sono le dimensioni del mio ArrayList prima di darlo in pasto all'adapter.

Codice (Java): [Seleziona]
public class AdapterDevices  extends ArrayAdapter<BluetoothDevice> {

                Sdevice context;
                List<BluetoothDevice> items;
   
                 private LayoutInflater inflater;

               

        public AdapterDevices(Activity aContext, ArrayList<BluetoothDevice> items) {
                super(aContext, R.layout.rowdevice, items);    
                this.items = items;
                this.context = (Sdevice) aContext;

          inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               
               
               
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
                 System.out.println("getView " + position + " " + convertView);
                View row = convertView;
                Log.w("AdapterDevices", "->" + position);
                if (convertView == null) {

                        row = inflater.inflate(R.layout.rowdevice,parent, false);

                }

                TextView nome = (TextView) row.findViewById(R.id.nomed);
                TextView address = (TextView) row.findViewById(R.id.addressd);
               BluetoothDevice temp_cat = (BluetoothDevice) items.get(position);
                nome.setText(temp_cat.getName());
                address.setText(temp_cat.getAddress());
               

                return row;

        }


               

}

Questo è l'adapter.

Teoricamente il risultato dovrebbe essere una lista di due elementi ( o più se ci sono )...
Ma me ne visualizza solo 1!!!
Perchè "pointer" viene sempre chiamato come 0 e non capisco perchè!
"System.out.println("getView " + position + " " + convertView);"

Codice: [Seleziona]
07-29 04:21:41.982: WARN/InputManagerService(2475): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@48391ae0 (uid=10116 pid=20640)
07-29 04:21:41.982: WARN/InputManagerService(2475): Client not active, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@485b05a8
07-29 04:21:42.158: INFO/System.out(20640): getView 0 null
07-29 04:21:42.158: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.181: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803b938
07-29 04:21:42.181: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.197: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803b938
07-29 04:21:42.197: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.213: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803b938
07-29 04:21:42.213: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.232: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803b938
07-29 04:21:42.232: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.275: INFO/System.out(20640): getView 0 null
07-29 04:21:42.275: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.299: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803f2e0
07-29 04:21:42.299: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.310: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803f2e0
07-29 04:21:42.310: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.322: INFO/System.out(20640): getView 0 android.widget.RelativeLayout@4803f2e0
07-29 04:21:42.326: WARN/AdapterDevices(20640): ->0
07-29 04:21:42.482: INFO/ActivityManager(2475): Displayed activity mixel.run/.sdevice: 678 ms (total 678 ms)

E' la prima volta che mi succede e non capisco dove sto sbagliando.

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Strano comportamento di una ListView
« Risposta #1 il: 29 Luglio 2011, 13:20:51 CEST »
0
Potresti postare il metodo getCount() ?

Credo che nel tuo sia:
Codice (Java): [Seleziona]
 int getCount(){
return 0;}
mentre dovrebbe essere:
Codice (Java): [Seleziona]
 int getCount(){
return items.size() ;}

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Re:Strano comportamento di una ListView
« Risposta #2 il: 29 Luglio 2011, 13:31:49 CEST »
0
Mi spiace ma ci avevo già pensato anche io e no, da lo stesso identico risultato.

Codice: [Seleziona]
07-29 13:31:10.246: INFO/System.out(24119): getView 0 android.widget.RelativeLayout@480456a0
07-29 13:31:10.246: WARN/AdapterDevices(24119): ->0
07-29 13:31:10.256: INFO/System.out(24119): getView 0 android.widget.RelativeLayout@480456a0
07-29 13:31:10.256: WARN/AdapterDevices(24119): ->0
07-29 13:31:10.260: INFO/System.out(24119): getView 0 android.widget.RelativeLayout@480456a0
07-29 13:31:10.263: WARN/AdapterDevices(24119): ->0
07-29 13:31:10.267: INFO/System.out(24119): getView 0 android.widget.RelativeLayout@480456a0
07-29 13:31:10.271: WARN/AdapterDevices(24119): ->0

In pratica quel "position" resta sempre zero, non si muove!
« Ultima modifica: 29 Luglio 2011, 13:38:00 CEST da carnauser »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Strano comportamento di una ListView
« Risposta #3 il: 29 Luglio 2011, 14:06:22 CEST »
0
E togliendo il "final" dal parametro position del metodo getView?

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Re:Strano comportamento di una ListView
« Risposta #4 il: 30 Luglio 2011, 13:36:01 CEST »
0
Stesso identico risultato...non va avanti!

Per sicurezza posto anche gli xml :

rowdevice.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent" android:layout_height="fill_parent"
       android:id="@+id/row_view_id">


       
        <TextView android:id="@+id/nomed" android:text="nome"
                android:gravity="center" android:layout_margin="2dip"
                android:layout_height="wrap_content" android:textSize="20sp"
                android:layout_width="wrap_content"
                ></TextView>
        <TextView android:id="@+id/addressd" android:text="fcdksajfksdlafj"
                android:gravity="center" android:layout_margin="2dip"
                android:layout_height="wrap_content" android:textSize="20sp"
                android:layout_width="wrap_content" android:layout_below="@+id/nomed"
                ></TextView>      
</RelativeLayout>


sdevice.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:background="@drawable/fondo">

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="260dip" android:layout_centerInParent="true"

                android:layout_height="416dip" android:background="@drawable/listadevice">
                <ScrollView android:id="@+id/scrollView1"
                        android:layout_marginTop="50dip"
                        android:layout_width="fill_parent" android:layout_height="wrap_content"
                        xmlns:android="http://schemas.android.com/apk/res/android">
                       
                        <ListView android:layout_height="wrap_content" android:id="@+id/listadevice"
                android:layout_width="fill_parent">
               
               
               
                </ListView>
                       
                </ScrollView>
        </RelativeLayout>
</RelativeLayo

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Strano comportamento di una ListView
« Risposta #5 il: 30 Luglio 2011, 13:46:04 CEST »
0
Io proverei a mettere un log anche nel costruttore dell'adapter, subito dopo this.items = items, per controllare se la lunghezza di items diventa davvero due, visto che tutto il resto mi sembra a posto. Nel caso non fosse così, userei un items.putAll() o qualche altro metodo per copiare gli elementi.

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Re:Strano comportamento di una ListView
« Risposta #6 il: 30 Luglio 2011, 13:52:56 CEST »
0
L'avevo già messo! E si era 2 (o meglio era 8 perchè avevo 8 device bt a portata di mano )
Cosa intendi per putAll() che fa ?

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Re:Strano comportamento di una ListView
« Risposta #7 il: 01 Agosto 2011, 15:33:42 CEST »
0
il problema potrebbe essere in qualcjhe modo legato a questo "null" ?

07-29 04:21:42.158: INFO/System.out(20640): getView 0 null

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Strano comportamento di una ListView
« Risposta #8 il: 01 Agosto 2011, 15:35:48 CEST »
0
No, perché alla creazione della prima riga la convertView è sempre nulla.

Offline carnauser

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Acer Liquid A1
Re:Strano comportamento di una ListView
« Risposta #9 il: 03 Agosto 2011, 17:25:48 CEST »
0
ListView è dentro uno ScrollView.
E questo è male.