2012-08-22 16 views
15

Quiero saber cuándo terminó BaseAdapter.notifyDataSetChanged() y luego hago sonething. Mi código:Detectar cuando BaseAdapter.notifyDataSetChanged() finalizó

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

mScroller rollos antes notifyDataSetChanged() acabados. Quiero mScroller para desplazarme a oldX después de notifyDataSetChanged() acabados.

Por favor, ayúdenme, gracias.

+0

alguien me ayude :( – hiepnh

+10

reloj [esto] (http://stackoverflow.com/questions/6942582/smoothscrolltoposition-after-notifydatasetchanged-not-working-in-android) pregunta posible duplicado. – grine4ka

+0

puede ser https://stackoverflow.com/a/20997828/5255006 le ayudará –

Respuesta

0

que estaba teniendo el mismo problema y termino haciendo esto-

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

que tenía exactamente el mismo problema, pruebe esto funcionó perfectamente para mí. Está anulando el método notifyDataSetChanged(). Usted hace esto en su clase de Adaptador. Simplemente copie el código que publiqué y reemplace la línea donde establecí SetSelection() con lo que necesite hacer.

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

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

Dicho esto, en el caso de que se preguntan, "parentGlobal" es el ListView que puse el adaptador en mi actividad. En el constructor del Adaptador, pasé en el ListView y luego lo hice "global". Me disculpo si "global" no es un término de Java, vengo de un mundo de C++.

// va en la actividad:

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 en Adaptador

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