I want to know when BaseAdapter.notifyDataSetChanged()
finish and then do sonething. My code:
BaseAdapter.notifyDataSetChanged(); mScroller.startScroll(oldX, 0, dx, 0);
mScroller
scrolls before notifyDataSetChanged()
finishes. I want mScroller
to scroll to oldX
after notifyDataSetChanged()
finishes.
Please help me, thank you.
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.
@Override public 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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With