Autore Topic: problema scroll listview!!!!!  (Letto 1386 volte)

Offline teo_

  • Utente junior
  • **
  • Post: 72
  • Respect: +1
    • Github
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
  • Sistema operativo:
    Windows 7 - Ubuntu 12.10
problema scroll listview!!!!!
« il: 09 Dicembre 2011, 14:47:41 CET »
0
salve a tutti..
ho un problema con una listview con layout personalizzato.. il layout di ogni elemento è il seguente:
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="wrap_content"
   android:background="@drawable/background_listview_element"
   android:padding="10dip" >

    <com.chimaera.corporation.myportfolio.utils.ListCheckBox
       android:id="@+id/checked"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:layout_centerVertical="true" />

    <TextView
       android:id="@+id/amountTransaction"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_centerVertical="true"
       android:maxWidth="90dip"
       android:text="Amount"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:textColor="#303030"
       android:textSize="16dip"
       android:textStyle="bold" />



    <TextView
       android:id="@+id/nameTransaction"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignLeft="@+id/dateTransaction"
       android:layout_alignTop="@+id/checked"
       android:layout_toLeftOf="@+id/checked"
       android:maxLines="1"
       android:maxWidth="120dip"
       android:text="nomeTransaction"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:textColor="@android:color/black" />

    <TextView
       android:id="@+id/dateTransaction"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/nameTransaction"
       android:layout_centerHorizontal="true"
       android:maxLines="1"
       android:text="dateTransaction"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="#707070" />

</RelativeLayout>

il problema sta nel fatto che quando ci sono molti elementi e faccio uno scroll verso il basso, ad un certo punto dello scroll la vista della listview torna al primo elemento, rendendo così impossibile lo scroll fino all'ultimo!!
credo che il problema consista nel fatto che ho applicato un layout particolare, o non proprio non riesco a capire.. qualche idea su cosa potrebbe essere il problema/su come mettere apposto?? grazie mille anticipatamente! ;-)

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema scroll listview!!!!!
« Risposta #1 il: 09 Dicembre 2011, 17:23:18 CET »
0
Ciao! Non so se ho capito bene: tu scrolli la lista per arrivare all'ultimo elemento ma improvvisamente la lista torna come se non ci fosse stato lo scroll? Oppure intendi che c'è uno sfasamento delle righe, tipo in posizione 4 c'è la riga che dovrebbe essere in posizione 6?
Il layout sembra a posto, credo che il problema sia nell'adapter. Prova a postarlo.  ;-)

Offline teo_

  • Utente junior
  • **
  • Post: 72
  • Respect: +1
    • Github
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
  • Sistema operativo:
    Windows 7 - Ubuntu 12.10
Re:problema scroll listview!!!!!
« Risposta #2 il: 09 Dicembre 2011, 18:09:01 CET »
0
Ciao! Non so se ho capito bene: tu scrolli la lista per arrivare all'ultimo elemento ma improvvisamente la lista torna come se non ci fosse stato lo scroll? Oppure intendi che c'è uno sfasamento delle righe, tipo in posizione 4 c'è la riga che dovrebbe essere in posizione 6?
Il layout sembra a posto, credo che il problema sia nell'adapter. Prova a postarlo.  ;-)
ciao Verandi! grazie della risposta, comunque avevi capito bene.. io scrollo la lista per arrivare all'ultimo elemento ma improvvisamente la lista torna come se non ci fosse stato lo scroll!!

questo è il codice dell'adapter.. spero possa essere utile!
Codice (Java): [Seleziona]
package com.chimaera.corporation.myportfolio;

import java.util.ArrayList;

import com.chimaera.corporation.myportfolio.database.MyPortfolioDbAdapter;
import com.chimaera.corporation.myportfolio.utils.ListCheckBox;
import com.chimaera.corporation.myportfolio.utils.MyPortfolioUtils;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

public class TransactionLayout extends ArrayAdapter<Transaction> {

        private Context context;
    private ArrayList<Transaction> items;
   
    private TextView nameTransaction;
    private TextView dateTransaction;
    private TextView amount;
    private String currency;
    private ListCheckBox checked;
   
    private long id;
    //private long accountId;

        private MyPortfolioDbAdapter dbHelper;
   
        public TransactionLayout(Context context, int resourceId, ArrayList<Transaction> items) {
               
        super(context, resourceId, items);
        this.items = items;
        this.context = context;
    }
       
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
               
                View v = convertView;
               
                if (v == null) {
            LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.transactionlistelement, null);
        }
               
                Transaction mTransaction = items.get(position);
               
                if(mTransaction != null) {
                       
                        //prendo le preferenze
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
                currency = " " + prefs.getString(Preferences.CURRENCY_LIST, Preferences.CURRENCY_LIST_DEFAULT);
                       
                nameTransaction = (TextView) v.findViewById(R.id.nameTransaction);
                dateTransaction = (TextView) v.findViewById(R.id.dateTransaction);
                amount = (TextView) v.findViewById(R.id.amountTransaction);
                checked = (ListCheckBox) v.findViewById(R.id.checked);
               
                id = items.get(position).getId();
                //accountId = mTransaction.getAccountId();
               
                checked.setTag(id);
               
                nameTransaction.setText(mTransaction.getCause());
                dateTransaction.setText(MyPortfolioUtils.getDate(mTransaction.getDate()));
                if(mTransaction.getReceived() == 1) amount.setText(MyPortfolioUtils.formatNumber(mTransaction.getAmount()) + currency);
                else amount.setText("-" + MyPortfolioUtils.formatNumber(mTransaction.getAmount()) + currency);
               
                if(mTransaction.getChecked() == 1){
                        checked.setChecked(true);
                } else {
                        checked.setChecked(false);
                }
               
                checked.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
                               
                                @Override
                                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                        //init db
                                        long _id = (Long) buttonView.getTag();
                                dbHelper = new MyPortfolioDbAdapter(context);
                                dbHelper.open();
                                //-------
                                        if(isChecked) {
                                                dbHelper.checkTransaction(_id, 1);
                                        } else {
                                                dbHelper.checkTransaction(_id, 0);
                                        }
                                        TransactionActivity.updateTransactions();
                                        dbHelper.close();
                                }
                        });
               
               
                }
               
                return v;
        }

}

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema scroll listview!!!!!
« Risposta #3 il: 09 Dicembre 2011, 19:58:45 CET »
+1
Le possibili cause che mi vengono in mente che possano causare quel problema è un update dell'adapter, per esempio un adapter.notifyDataSetChanged, oppure il settarne uno nuovo alla listView oppure un setSelection. Poiché capita durante lo scroll, immagino che il problema sia nel getView, visto che viene continuamente richiamato quando si fa lo scroll.
Premesso questo, non ne sono sicuro, ma forse il problema potrebbe essere qui: TransactionActivity.updateTransactions(); Forse in questo metodo updateTransactions() vai a toccare in qualche modo listView o adapter. Prova a commentare questa riga del getView dell'adapter e vedere cosa succede. :)

Offline teo_

  • Utente junior
  • **
  • Post: 72
  • Respect: +1
    • Github
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4
  • Sistema operativo:
    Windows 7 - Ubuntu 12.10
Re:problema scroll listview!!!!!
« Risposta #4 il: 10 Dicembre 2011, 00:56:36 CET »
0
Le possibili cause che mi vengono in mente che possano causare quel problema è un update dell'adapter, per esempio un adapter.notifyDataSetChanged, oppure il settarne uno nuovo alla listView oppure un setSelection. Poiché capita durante lo scroll, immagino che il problema sia nel getView, visto che viene continuamente richiamato quando si fa lo scroll.
Premesso questo, non ne sono sicuro, ma forse il problema potrebbe essere qui: TransactionActivity.updateTransactions(); Forse in questo metodo updateTransactions() vai a toccare in qualche modo listView o adapter. Prova a commentare questa riga del getView dell'adapter e vedere cosa succede. :)
grazie mille!! avevi ragione tu!! con quel metodo andavo inutilmente a fare un update di tutte le transaction della listview richiamando anche il metodo adapter.notifyDataSetChanged() !!
ora ho sistemato facendo in modo di non usare adapter.notifyDataSetChanged() e tutto funziona alla grande (almeno per ora!!  ;-))
grazie ancora sei stato utilissimo :D

Offline xixietto

Re:problema scroll listview!!!!!
« Risposta #5 il: 21 Ottobre 2015, 15:04:49 CEST »
0
scusate in caso ci fosse uno sfasamento delle righe, tipo in posizione 4 c'è la riga che dovrebbe essere in posizione 6?