working studio que not getposition ejemplo clase arrayadapter array android baseadapter

android - studio - Detectar cuando BaseAdapter.notifyDataSetChanged() finalizó



notifydatasetchanged not working (4)

Quiero saber cuándo BaseAdapter.notifyDataSetChanged() y luego realiza la prueba de sonido. Mi código:

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

mScroller desplaza antes de que notifyDataSetChanged() finalice. Quiero que mScroller desplace a oldX después de que notifyDataSetChanged() termine.

Por favor ayúdame, gracias.


En lugar de ampliar, BaseAdapter admite el registro de un DataSetObserver donde puede escuchar el evento onChanged .

El método notifyDataSetChanged provocará que este evento se notifyDataSetChanged .

adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { // ... } }); ... adapter.notifyDataSetChanged();


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


Esto es tarde pero podría ser útil para cualquiera que venga después.

Si está familiarizado con RxJava2 y Completable , puede detectar si notifyDataSetChanged() o cualquier operación en la interfaz de usuario ha finalizado.

Completable.fromAction { // notifyDataSetChanged() here } .subscribe(object : DisposableCompletableObserver() { override fun onComplete() { recyclerView.scrollTo(position) } override fun onError(e: Throwable) { // handle error here } })


Tuve el mismo problema exacto, prueba esto funcionó perfectamente para mí. Está anulando el método notifyDataSetChanged (). Haces esto en tu clase de Adaptador. Simplemente copie el código que publiqué y reemplace la línea donde establecíSelección () 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 caso de que se esté preguntando, "parentGlobal" es el ListView al que configuré el Adaptador en mi Actividad. En el constructor del adaptador, pasé en el ListView y luego lo hice "global". Pido disculpas si "global" no es un término de Java, vengo de un mundo de C ++.

// entra en 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)