Autore Topic: Bottoni per navigare fra le pagine  (Letto 1876 volte)

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Bottoni per navigare fra le pagine
« il: 22 Novembre 2011, 16:55:51 CET »
0
Eccomi di nuovo con un altro problema  :-[

Ho creato dei bottoni per navigare tra le pagine ( vai avanti , indietro , vai a pag )
il layout è questo :

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <RelativeLayout
       android:id="@+id/relativeLayout1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_weight="0.10" >

        <Button
           android:id="@+id/page"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:layout_centerHorizontal="true"
           android:onClick="goToPage"
           android:text="Pagina" />

        <Button
           android:id="@+id/start"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentLeft="true"
           android:onClick="goFisrtPage"
           android:text="Inizio" />

        <Button
           android:id="@+id/end"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
           android:onClick="goLastPage"
           android:text="Ultimo" />

        <Button
           android:id="@+id/next"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:layout_toRightOf="@+id/page"
           android:onClick="goNextPage"
           android:text="Succ" />

        <Button
           android:id="@+id/back"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentTop="true"
           android:layout_toLeftOf="@+id/page"
           android:onClick="goBackPage"
           android:text="Prec" />

    </RelativeLayout>

</LinearLayout>

il codice per inserirle:
Codice (Java): [Seleziona]
                LayoutInflater inflater = getLayoutInflater();
                ViewGroup header = (ViewGroup)inflater.inflate(R.layout.page_navigator, _listView, false);
               
                createHeaderBanner();
                //aggiungo bottoni in testa
                _listView.addHeaderView(header, null, false);
                //aggiungo bottoni in coda
                _listView.addFooterView(header, null, false);
                createFooterBanner();

i bottoni in alto funzionano tutti .. quelli in basso solo la funzione goToPage le altre mi bloccano il programma

goBackPage(le altre sono simili)
Codice (Java): [Seleziona]
        public void goBackPage(View view) {
                if(_currentPage > 1)
                {
                        _currentPage--;
                        _link = Util.getLinkPage(_link, _currentPage,Util.NUM_POST_FOR_THREAD);
                        //              Log.v("snow", _link);
                        //Toast.makeText(getBaseContext(), _link, Toast.LENGTH_LONG).show();
                        showDialog(Util.LOADING_DIALOG);
                        HttpGetTask task = new HttpGetTask();
                        task.execute();

                }else
                {
                        disableBackButton();
                }

        }

goToPage(unica che funziona in entrambi)
Codice (Java): [Seleziona]
showDialog(Util.PAGE_SELECTOR_DIALOG);
logcat
Codice: [Seleziona]
11-22 16:54:25.529: E/AndroidRuntime(9383): FATAL EXCEPTION: main
11-22 16:54:25.529: E/AndroidRuntime(9383): java.lang.IndexOutOfBoundsException: Invalid index 12, size is 1
11-22 16:54:25.529: E/AndroidRuntime(9383):         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at java.util.ArrayList.get(ArrayList.java:311)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.widget.ListView.dispatchDraw(ListView.java:3061)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.View.draw(View.java:7003)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.widget.AbsListView.draw(AbsListView.java:2641)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.View.draw(View.java:6900)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.View.draw(View.java:6900)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1908)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewRoot.draw(ViewRoot.java:1527)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.os.Looper.loop(Looper.java:130)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at android.app.ActivityThread.main(ActivityThread.java:3835)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at java.lang.reflect.Method.invokeNative(Native Method)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at java.lang.reflect.Method.invoke(Method.java:507)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-22 16:54:25.529: E/AndroidRuntime(9383):         at dalvik.system.NativeStart.main(Native Method)


Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #1 il: 22 Novembre 2011, 17:09:24 CET »
0
Il logcat dice che c'è un errore su un arraylist. Richiedi la posizione 12 ma la grandezza dell'array è 1.  ;-)

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #2 il: 22 Novembre 2011, 17:14:25 CET »
0
Il problema e che li non sto usando arraylist in questo metodo  :-\ :-\ :-\

Codice (Java): [Seleziona]
 _link = Util.getLinkPage(_link, _currentPage,Util.NUM_POST_FOR_THREAD);
qui sono tutte stringhe ...

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #3 il: 22 Novembre 2011, 17:25:57 CET »
0
L'errore è nel metodo .HeaderViewListAdapter.isEnabled() richiamato al disegno della listview.
Nella documentazione c'è scritto:
Citazione
public boolean isEnabled (int position)
Since: API Level 1

Returns true if the item at the specified position is not a separator. (A separator is a non-selectable, non-clickable item). The result is unspecified if position is invalid. An ArrayIndexOutOfBoundsException should be thrown in that case for fast failure.

Però, senza vedere il codice in questione, non mi viene in mente un possibile motivo dell'errore.  :)

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #4 il: 22 Novembre 2011, 17:30:04 CET »
0
Ma quello che non capisco io è: perchè quelli di sopra funzionano e quelli in basso no che sono uguali ?  o_O o_O

l'asyncTask usa l'arraylist, ma all'inizio lo svuota e poi lo riempe non fa nessun get..

Citazione
Però, senza vedere il codice in questione, non mi viene in mente un possibile motivo dell'errore. 

non so cosa postarti  :-)

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #5 il: 22 Novembre 2011, 17:41:28 CET »
0
Visto che gli altri metodi sono simili, proverei a vedere in che punto del goBackPage() l'applicazione va in crash, usando qualche riga di log. Per esempio usa quel Log.v("snow", _link); e vedi se appare nel logcat. Se sì, allora prova ad inserirlo dopo lo showDialog  e così via finché non trovi il metodo che dà errore.
A quel punto posta il codice del metodo in questione.  ;-)

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #6 il: 25 Novembre 2011, 12:50:33 CET »
0
Ho fatto come hai detto ...

Codice (Java): [Seleziona]
        public void goLastPage(View view) {
                if(_currentPage > 0)
                {
                        Log.v("snow3", "test1");
                        _currentPage = _numMaxPage;
                        _link = Util.getLinkPage(_link, _currentPage,Util.NUM_POST_FOR_THREAD);
                        Log.v("snow3", "test2");
                        //      Log.v("snow", _link);
                        //Toast.makeText(getBaseContext(), _link, Toast.LENGTH_LONG).show();
                        showDialog(Util.LOADING_DIALOG);
                        Log.v("snow3", "test3");
                        HttpGetTask task = new HttpGetTask();
                        task.execute();
                        Log.v("snow3", "test4");

                }

                disableNextButton();

        }

...

        private void disableNextButton() {
               
                Log.v("snow3", "d1");
                Button next = (Button) findViewById(R.id.next);
                Button end = (Button) findViewById(R.id.end);
                Log.v("snow3", "d2 " + next.toString() + " | " + end.toString() );
                next.setEnabled(false);
                end.setEnabled(false);
                Log.v("snow3", "d3");

        }

LOGCAT:
Codice: [Seleziona]
11-25 12:49:22.518: V/snow3(30788): test1
11-25 12:49:22.518: V/snow3(30788): test2
11-25 12:49:22.518: V/snow3(30788): test3
11-25 12:49:22.518: V/snow3(30788): test4
11-25 12:49:22.518: V/snow3(30788): d1
11-25 12:49:22.518: V/snow3(30788): d2 android.widget.Button@405aaca8 | android.widget.Button@4059e798
11-25 12:49:22.528: V/snow3(30788): d3
11-25 12:49:22.528: D/AndroidRuntime(30788): Shutting down VM
11-25 12:49:22.528: W/dalvikvm(30788): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-25 12:49:22.538: E/AndroidRuntime(30788): FATAL EXCEPTION: main
11-25 12:49:22.538: E/AndroidRuntime(30788): java.lang.IndexOutOfBoundsException: Invalid index 12, size is 2
11-25 12:49:22.538: E/AndroidRuntime(30788):         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at java.util.ArrayList.get(ArrayList.java:311)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.widget.ListView.dispatchDraw(ListView.java:3061)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.View.draw(View.java:7003)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.widget.AbsListView.draw(AbsListView.java:2641)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.View.draw(View.java:6900)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.View.draw(View.java:6900)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1908)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewRoot.draw(ViewRoot.java:1527)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.os.Looper.loop(Looper.java:130)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at android.app.ActivityThread.main(ActivityThread.java:3835)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at java.lang.reflect.Method.invokeNative(Native Method)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at java.lang.reflect.Method.invoke(Method.java:507)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-25 12:49:22.538: E/AndroidRuntime(30788):         at dalvik.system.NativeStart.main(Native Method)


mistero ....

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #7 il: 25 Novembre 2011, 13:05:18 CET »
0
Visto che tutto va bene, forse il problema è nell'asynctask (anche se il logcat mi lascia dubbioso). Prova a inserire i log anche lì.   ;-)

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #8 il: 25 Novembre 2011, 15:49:25 CET »
0
EDIT...

l'errore sta qui ...
Codice (Java): [Seleziona]
        private void createHeaderBanner()
        {
                ListView lv = (ListView) findViewById(R.id.list_post);
                LayoutInflater inflater = getLayoutInflater();
                ViewGroup header = (ViewGroup)_inflater.inflate(R.layout.banner, _lv, false);

                AdView adView = new AdView(this, AdSize.BANNER, "CODICEBANNER");
                // Effettuiamo la lookup della ViewGroup che conterrà il nostro banner

                // Aggiungiamo la view adView al LinearLayout
                header.addView(adView);
                // Richiediamo un nuovo banner al server di AdMod
                adView.loadAd(new AdRequest());


                lv.addHeaderView(header, null, false);


        }
se tolgo questo funziona ... la domanda è : perchè ??? o_O
« Ultima modifica: 25 Novembre 2011, 17:35:34 CET da ale88sv »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #9 il: 25 Novembre 2011, 16:17:16 CET »
0
Io farei così, sperando funzioni:  ;-)
Codice (Java): [Seleziona]
public class ListPostAdapter extends BaseAdapter /*implements  ImageGetter*/{
        // Toglierei "static" per evitare problemi nel caso utilizzi più istanze contemporaneamene e lo inizializzo (vd il perché nel costruttore)
private ArrayList<Post> _postList = new ArrayList<Post>();

        private LayoutInflater mInflater;


        public ListPostAdapter(LayoutInflater inflater, ArrayList<Post> results) {
                _postList = results; //Associa una referenza all'arraylist results, io lo sostituirei con le righe seguenti:
             //Copio gli elementi dell'arraylist passato nell'arraylist di questo adapter, così sono sicuro che non verrà cambiato in altri punti dell'applicazione. Non uso il metodo clone().
              for (Post post:results){
                      _postList.add(post);
              }
                mInflater = inflater;
        }

        public int getCount() {
                return _postList.size();
        }

        public Object getItem(int position) {
                return _postList.get(position);
               
        }

        public long getItemId(int position) {
                return position;
        }


       
        public View getView(int position, View convertView, ViewGroup parent) {

                ViewHolder holder;

                Log.v("snow3", "position: " + position + " count = " + getCount());
               // Toglierei questa condizione perché la posizione sarà sempre minore della lunghezza dell'arraylist.
                if(position < getCount())
                {
                        if (convertView == null) {
                                convertView = mInflater.inflate(R.layout.post_item, null);
                                holder = new ViewHolder();
                                holder.user_icon = (ImageView) convertView.findViewById(R.id.user_icon);
                                holder.user_name = (TextView) convertView.findViewById(R.id.user_name);
                                holder.user_mex = (TextView) convertView.findViewById(R.id.user_mex);
                                holder.user_post = (WebView) convertView.findViewById(R.id.user_post);
               
                                convertView.setTag(holder);
                        } else {
                                holder = (ViewHolder) convertView.getTag();
                        }
               
                        Bitmap icon = _postList.get(position).getIcon();
                        if(icon == null) // Mancano le graffe?
                                holder.user_icon.setImageResource(R.drawable.ic_launcher);
                       
                        else
                                holder.user_icon.setImageBitmap(icon);
                       
                        holder.user_name.setText(_postList.get(position).getUser());
                       

                        if(_postList.get(position).getNumMex().compareTo("-1") != 0)
                                   //Mancano le graffe?
                                holder.user_mex.setText("Messaggi: "+_postList.get(position).getNumMex());
                        else
                                holder.user_mex.setText("Utente Cancellato");
                       
                       
                       
                        //holder.user_post.setText(Html.fromHtml(_postList.get(position).getPost(), this, null));
                        holder.user_post.loadData(_postList.get(position).getPost(),"text/html", "UTF-16");
                        holder.user_post.getSettings().setJavaScriptEnabled(true);
                        // apro il link con il browser
                        holder.user_post.setWebViewClient(new WebViewClient(){
                            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                                if (url != null && url.startsWith("http://")) {
                                    view.getContext().startActivity(
                                        new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                                    return true;
                                } else {
                                    return false;
                                }
                            }
                        });
                }
       
                return convertView;
        }
       


        static class ViewHolder {
                ImageView user_icon;
                TextView user_name,user_mex;
                WebView user_post;
        }

}

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #10 il: 25 Novembre 2011, 16:39:54 CET »
+1
EDIT...

l'errore sta qui ...

   
Codice (Java): [Seleziona]
private void createHeaderBanner()
        {
                ListView lv = (ListView) findViewById(R.id.list_post);
                LayoutInflater inflater = getLayoutInflater();
                ViewGroup header = (ViewGroup)_inflater.inflate(R.layout.banner, _lv, false);

                AdView adView = new AdView(this, AdSize.BANNER, "CODICEBANNER");
                // Effettuiamo la lookup della ViewGroup che conterrà il nostro banner

                // Aggiungiamo la view adView al LinearLayout
                header.addView(adView);
                // Richiediamo un nuovo banner al server di AdMod
                adView.loadAd(new AdRequest());


                lv.addHeaderView(header, null, false);


        }

se tolgo questo funziona ... la domanda è : perchè ??? o_O

Secondo me puoi tranquillamente usare il metodo con un solo paramentro: lv.addHeaderView(header);
Poi, nella documentazione c'è:
Citazione
NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.
Per caso lo richiami dopo aver settato l'adapter?
Per ultimo: c'è scritto appunto di richiamare l'addHeaderView() prima di settare l'adapter, in modo che la listview sappia che ci sono n elementi da visualizzare + 1 (che è l'headerView). Non so se ciò funzioni anche con i custom adapter come il tuo, dove sei tu a gestire il numero di elementi della lista nel metodo getCount(), oppure se sia davvero gestito autonomamente dalla listView.

Comunque, poiché in un logCat che avevi postato c'era  "Invalid index 12, size is 2", se il problema fosse stato il setHeaderView(), l'errore del logcat dovrebbe essere stato qualcosa come "Invalid index 2, size is 2", ovvero la listview, al momento del disegno di due righe più l'header, per disegnare la seconda riga avrebbe richiesto l'indice 2 di un arraylist che ha solo le posizioni 0 e 1 (l'errore infatti e in un metodo interno alla classe listView che controlla se la riga da disegnare sia un'headerView o una riga vera e propria della listView).
Questo mi fa pensare che forse, avendo dichiarato statico l'arraylist dei post nell'adapter e/o salvando la referenza all'arraylist results invece che copiarne gli elementi, al momento del disegno della listView, qualcosa venga cambiato nell'array e ti ritrovi con l'errore che hai postato.
Non so se sia stato proprio chiaro.  :-P
« Ultima modifica: 25 Novembre 2011, 16:44:23 CET da Verandi »

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #11 il: 25 Novembre 2011, 17:28:10 CET »
0
Citazione
NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.
Per caso lo richiami dopo aver settato l'adapter?
Per ultimo: c'è scritto appunto di richiamare l'addHeaderView() prima di settare l'adapter, in modo che la listview sappia che ci sono n elementi da visualizzare + 1 (che è l'headerView). Non so se ciò funzioni anche con i custom adapter come il tuo, dove sei tu a gestire il numero di elementi della lista nel metodo getCount(), oppure se sia davvero gestito autonomamente dalla listView.

Comunque, poiché in un logCat che avevi postato c'era  "Invalid index 12, size is 2", se il problema fosse stato il setHeaderView(), l'errore del logcat dovrebbe essere stato qualcosa come "Invalid index 2, size is 2", ovvero la listview, al momento del disegno di due righe più l'header, per disegnare la seconda riga avrebbe richiesto l'indice 2 di un arraylist che ha solo le posizioni 0 e 1 (l'errore infatti e in un metodo interno alla classe listView che controlla se la riga da disegnare sia un'headerView o una riga vera e propria della listView).
Questo mi fa pensare che forse, avendo dichiarato statico l'arraylist dei post nell'adapter e/o salvando la referenza all'arraylist results invece che copiarne gli elementi, al momento del disegno della listView, qualcosa venga cambiato nell'array e ti ritrovi con l'errore che hai postato.
Non so se sia stato proprio chiaro. 

Oltre all'header ho anche un footer .. penso sia quello il "12" ..

Io ora l'header ed il footer li aggiungo solo una volta nella creazione dell'activity però me li visualizza sempre ..
penso che posso risolvere in almeno 2 modi :
1 ) lasciarli statici ( bleah )
2 ) inserirli insieme ai messaggi ...
3 ) non so se si puo' , fare una sorta di listview.CLEAR (come si fa di solito per gli arraylist) cosi da aggiungere l'header ed il footer e poi l'adapter..

ora provo ..

Grazie per l'aiuto ;) 

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #12 il: 25 Novembre 2011, 22:20:35 CET »
0
Potresti provare richiamando, all'occorenza:
Codice (Java): [Seleziona]
header.setVisibility(View.GONE)Fammi sapere se funziona, che sono curioso.  ;-)

Da quel che hai scritto (header e footer rimangono statici), deduco che allora siano gestiti dalla listview che, nel conteggio, tiene conto sia del numero degli elementi dell'adapter che dell'eventuale presenza di header e footer.

Secondo me, per aggiornare la listView, potresti aggiungere questo metodo all'adapter:
Codice (Java): [Seleziona]
 
public void updatePosts(ArrayList<Post> results){
//Resetta l'arrayList dell'adapter
_postList.clear();
// Copia gli elementi nell'arraylist dell'adapter
for (Post post:results){
_postList.add(post);
}
// Notifica l'adapter che i dati sono cambiati
notifyDatasetChanged();
}
 

Poi, nell'onPostExecute() dell'asynctask, lo richiami con un adapter.updatePosts(results).
« Ultima modifica: 25 Novembre 2011, 22:42:18 CET da Verandi »

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Bottoni per navigare fra le pagine
« Risposta #13 il: 26 Novembre 2011, 16:51:20 CET »
0
mmm non so se ho capito bene ...

Codice (Java): [Seleziona]
                @Override
                protected void onPostExecute(String result) {
                        // chiudo la progress dialog
                        if(_progressDialog != null)
                                _progressDialog.cancel();
                        //aggiorno la lista
                        if(_adapt == null)
                                _adapt = new ListPostAdapter(_inflater, _listPost,_activity);
                       
                        _adapt.updatePosts(_listPost);
                        _listView.setAdapter(_adapt);
                       

                }

se è cosi non mi visualizza nulla ...

non ho capito neanche
Codice (Java): [Seleziona]
header.setVisibility(View.GONE)
 :D :D :D

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottoni per navigare fra le pagine
« Risposta #14 il: 26 Novembre 2011, 17:15:35 CET »
0
Tu hai una sola listview e in base al pulsante premuto l'aggiorni. Ho capito giusto?
La mia idea era di:
- Nell'onCreate creare l'adapter (modificando il costruttore in modo da non dover passare l'array di post) e associarlo alla listview. Quindi ottieni una listview vuota.
- Una volta premuto uno dei pulsanti, fai partire l'asynctask e nell'onpostexecute richiami il metodo updatePosts() passando i post da visualzzare, senza dover fare alcun null-check dell'adapter.

Per quanto riguarda l'header e il footer, con header.setVisibility(View.GONE) li fai "sparire" dalla listView.