我想知道什么时候BaseAdapter.notifyDataSetChanged()
完成,然后做一些事情。我的代码:
BaseAdapter.notifyDataSetChanged();
mScroller.startScroll(oldX, 0, dx, 0);
mScroller
完成前滚动 notifyDataSetChanged()
。我想在完成后mScroller
滚动到。oldX
notifyDataSetChanged()
请帮帮我,谢谢。
我想知道什么时候BaseAdapter.notifyDataSetChanged()
完成,然后做一些事情。我的代码:
BaseAdapter.notifyDataSetChanged();
mScroller.startScroll(oldX, 0, dx, 0);
mScroller
完成前滚动 notifyDataSetChanged()
。我想在完成后mScroller
滚动到。oldX
notifyDataSetChanged()
请帮帮我,谢谢。
BaseAdapter
支持注册一个DataSetObserver
可以监听onChanged
事件的位置,而不是扩展。
该notifyDataSetChanged
方法将导致此事件触发。
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
// ...
}
});
...
adapter.notifyDataSetChanged();
我有同样的问题,试试这个对我来说非常有效。您正在覆盖方法 notifyDataSetChanged()。您可以在 Adapter 类中执行此操作。只需复制我发布的代码并将我 setSelection() 的行替换为您需要做的任何事情。
@Override
public void notifyDataSetChanged()
{
super.notifyDataSetChanged();
parentGlobal.setSelection(this.getCount() - 1); //This is how we start Activity fully scrolled to bottom
}
话虽如此,如果您想知道,“parentGlobal”是我在 Activity 中将 Adapter 设置为的 ListView。在适配器的构造函数中,我传入了 ListView,然后将其设为“全局”。如果“全球”不是 Java 术语,我深表歉意,我来自 C++ 世界。
//进入活动:
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);
//进入适配器
public Adapter_Conversation(AppCompatActivity activity, @LayoutRes int resource,
ArrayList<Adapter_GetSet_Conversation> list_conversation, ListView lv_main,
int item_margin_px)
这已经晚了,但可能对以后来的人有帮助。
如果你熟悉RxJava2
和Completable
,你可以检测notifyDataSetChanged()
到 UI 上的任何操作是否完成。
Completable.fromAction {
// notifyDataSetChanged() here
}
.subscribe(object : DisposableCompletableObserver() {
override fun onComplete() {
recyclerView.scrollTo(position)
}
override fun onError(e: Throwable) {
// handle error here
}
})
我遇到了同样的问题,我最终这样做了-
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
请参阅以下(更现代的)带有 kotlin 扩展功能的实现:
fun <VH : ViewHolder> RecyclerView.Adapter<VH>.notifyDataSetChanged(
completion: () -> Unit
) {
val adapter = this
val observer = object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
adapter.unregisterAdapterDataObserver(this)
completion.invoke()
}
}
registerAdapterDataObserver(observer)
notifyDataSetChanged()
}