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)