Detect when BaseAdapter.notifyDataSetChanged() finished Detect when BaseAdapter.notifyDataSetChanged() finished android android

Detect when BaseAdapter.notifyDataSetChanged() finished


Instead of extending, BaseAdapter supports registering a DataSetObserver where you can listen for the onChanged event.

The notifyDataSetChanged method will cause this event to fire.

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


I had the same exact problem, try this out it worked perfectly for me.You are Overriding the method notifyDataSetChanged(). You do this in your Adapter class. Just copy the code i posted and replace the line where I setSelection() with what ever you need done.

@Overridepublic void notifyDataSetChanged(){    super.notifyDataSetChanged();    parentGlobal.setSelection(this.getCount() - 1);  //This is how we start Activity fully scrolled to bottom}

With that said, in case you are wondering, "parentGlobal" is the ListView that I set the Adapter to in my Activity. In the constructor of the Adapter, I passed in the ListView and then made it "global". I apologize if "global" isn't a Java term, I come from a C++ world.

//Goes in Activity:

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);

//Goes in Adapter

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


This is late but might be helpful for anyone coming later.

If you are familiar with RxJava2 and Completable, you can detect if notifyDataSetChanged() or any operation on UI is finished.

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