2012-08-22 19 views
15

Voglio sapere quando termina BaseAdapter.notifyDataSetChanged() e poi eseguire il sonoro. Il mio codice:Rileva quando BaseAdapter.notifyDataSetChanged() è terminato

BaseAdapter.notifyDataSetChanged(); 
mScroller.startScroll(oldX, 0, dx, 0); 

mScroller rotoli prima notifyDataSetChanged() finiture. Voglio mScroller scorrere fino a oldX dopo le finiture notifyDataSetChanged().

Per favore aiutatemi, grazie.

+0

qualcuno mi aiuti :( – hiepnh

+10

Watch [questo] (http://stackoverflow.com/questions/6942582/smoothscrolltoposition-after-notifydatasetchanged-not-working-in-android) domanda possibile duplicato – grine4ka

+0

potrebbe essere https://stackoverflow.com/a/20997828/5255006 ti aiuterà –

risposta

0

ho avuto lo stesso problema e finisco per fare questo-

BaseAdapter.notifyDataSetChanged(); 
new Handler().postDelayed(new Runnable() { 
     @Override 
       public void run() { 
       mScroller.startScroll(oldX, 0, dx, 0); 
       //write scroll code here 
       } 
     },50); //scroll after 50ms 
0

Ho avuto lo stesso problema esatto, provare questo ha funzionato perfettamente per me. Si sta eseguendo l'override del metodo notifyDataSetChanged(). Lo fai nella tua classe Adapter. Basta copiare il codice che ho postato e sostituire la linea in cui setSelection() con quello che mai hai bisogno di fare.

@Override 
public void notifyDataSetChanged() 
{ 
    super.notifyDataSetChanged(); 

    parentGlobal.setSelection(this.getCount() - 1); //This is how we start Activity fully scrolled to bottom 
} 

Detto questo, nel caso in cui vi state chiedendo, "parentGlobal" è la ListView che ho impostato l'adattatore alla mia attività. Nel costruttore dell'adapter, ho passato in ListView e l'ho reso "globale". Mi scuso se "globale" non è un termine Java, vengo da un mondo C++.

// va in attività:

lv_main = (ListView) findViewById(R.id.listView_conversation); 
    adapter_main = new Adapter_Conversation(ConversationActivity.this, R.layout.layout_list_conversation, 
      list_main_UI, lv_main, main_list_item_margin_px); 
    lv_main.setAdapter(adapter_main); 

// va in adattatore

public Adapter_Conversation(AppCompatActivity activity, @LayoutRes int resource, 
          ArrayList<Adapter_GetSet_Conversation> list_conversation, ListView lv_main, 
          int item_margin_px) 
Problemi correlati