Autore Topic: ListFragment e loader  (Letto 579 volte)

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
ListFragment e loader
« il: 14 Marzo 2013, 19:07:41 CET »
0
Ciao ragassi,avrei bisogno di una mano.
Ho fatto una mia ListFragment che ovviamente mostra una lista di oggetti.
Inizialmente caricavo questa lista attraverso un'AsyncTask e tutto andava liscio.
Ora sto cercando di usare un Loader al posto dell'AsyncTask,il problema è che no mi aggiunge gli elementi quando chiama il metodo onLoadFinished
Codice: [Seleziona]
@Override
        public void onLoadFinished(Loader<List<Corso>> arg0, List<Corso> arg1) {
                adapter.addAll(arg1);
                adapter.notifyDataSetChanged();
        }

provando in debug effettivamente nel metodo entra e arg1 è piena.

posto tutta la classe
Codice: [Seleziona]

public class PrenotazioniFragment extends ListFragment implements LoaderManager.LoaderCallbacks<List<Corso>> {

        private static String ANDUSERNAME = "xxxxxx";
        private static String ANDPASSWORD = "yyyyyy";
        private CorsiListAdapter adapter;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                return inflater.inflate(R.layout.prenotazioni_fragment, container);
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                adapter = new CorsiListAdapter(getActivity(), R.layout.corso_list_item);
                setListAdapter(adapter);
                LoaderManager lm = getLoaderManager();
                lm.initLoader(1, null, this).forceLoad();
               
               
                //this.getActivity().getSupportLoaderManager().initLoader(0, null, this).forceLoad();
               
                //setEmptyText("Non hai corsi");
        }
       
        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
                // TODO Auto-generated method stub
               
        }

        @Override
        public void onListItemClick(ListView l, View v, int position, long id) {
                // Log.i("FragmentList", "Item clicked: " + id);
        }

       

        @Override
        public Loader<List<Corso>> onCreateLoader(int arg0, Bundle arg1) {
                SharedPreferences prefs = getActivity().getSharedPreferences(getActivity().getPackageName(), Activity.MODE_PRIVATE);
                CorsiLoader loader = new CorsiLoader(getActivity().getApplication(), prefs.getString("userid", ""));
                return loader;
        }

        @Override
        public void onLoadFinished(Loader<List<Corso>> arg0, List<Corso> arg1) {
                //adapter.clear();
                adapter.addAll(arg1);
                adapter.notifyDataSetChanged();
        }
       
        @Override
        public void onLoaderReset(Loader<List<Corso>> arg0) {

        }

        public static class CorsiLoader extends AsyncTaskLoader<List<Corso>> {

                private String memberid;

                public CorsiLoader(Context context, String memberid) {
                        super(context);
                        this.memberid = memberid;
                }

                public List<Corso> loadInBackground() {
                        String token = ((Virgym)getContext()).getAuthToken();
                        if (token == null) {
                                RequestWrapper authenticate = new RequestWrapper(ActionsEnum.AuthenticateUser);
                                authenticate.addProperty("username", ANDUSERNAME);
                                authenticate.addProperty("password", ANDPASSWORD);
                                token = ((SoapPrimitive) authenticate.execute()).toString();
                                ((Virgym)getContext()).setAuthToken(token);
                        }
                        RequestWrapper request = new RequestWrapper(ActionsEnum.GetWeekOverviewByMember);
                        request.addProperty("authenticatedToken", token);
                        request.addProperty("memberId", this.memberid);
                        request.addProperty("clubId", "MIR");
                        request.addProperty("rootCategory", "Fitness");
                        SoapObject response = (SoapObject) request.execute();
                        int count = response.getPropertyCount();
                        List<Corso> corsi = new ArrayList<Corso>();
                        for (int i = 0; i < count; i++) {
                                Corso c = new Corso();
                                SoapObject corsoresp = (SoapObject) response.getProperty(i);
                                try {
                                        Date now = new Date();
                                        Date datacorso = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss", Locale.ITALIAN).parse(corsoresp.getProperty("StartDateTime").toString());
                                        if (datacorso.before(now)) {
                                                continue;
                                        }
                                        c.setInizio(datacorso);
                                } catch (ParseException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                c.setDurata(Integer.parseInt(corsoresp.getProperty("DurationInMins").toString()));
                                c.setId(corsoresp.getProperty("BookingSummaryId").toString());

                                c.setNome(corsoresp.getProperty("BookingName").toString());
                                c.setPostiMax(Integer.parseInt(corsoresp.getProperty("MaxSpaces").toString()));
                                c.setPostiPresi(Integer.parseInt(corsoresp.getProperty("BookedSpaces").toString()));
                                c.setType(corsoresp.getProperty("ActivityTypeId").toString());
                                corsi.add(c);
                        }
                        return corsi;
                }
        }
       
}


        }
non capisco dove sia il problema,se creo sbagliato il mio custom loader CorsiLoader o l'adapter(che andava benissimo con l'AsyncTask)...aiuto!


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:ListFragment e loader
« Risposta #1 il: 15 Marzo 2013, 00:45:02 CET »
0
Cosa dice il logcat?

Inviato dal mio Galaxy Nexus con Tapatalk 2


Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:ListFragment e loader
« Risposta #2 il: 15 Marzo 2013, 11:56:12 CET »
0
Cosa dice il logcat?

Inviato dal mio Galaxy Nexus con Tapatalk 2

ora non sono a casa,comunque non dà nessun errore,niente di niente,esegue il loader,entra nel loadfinished con la lista piena ma la listview non si riempe