如何在附加 ArrayAdapter 后的 ListView 完成渲染时获得回调?
How to get a callback when a ListView finishes rendering after being attached an ArrayAdapter?
我基本上用 ArrayAdapter
填充 ListView lv
并且我需要在渲染后以编程方式 lv.smoothScrollToPosition(i)
;否则,它将不起作用。我正在收听的事件是 onWindowFocusChanged(boolean hasFocus)
将适配器设置为列表视图。
如何捕捉滚动 lv
的最佳时刻?
尝试在getView方法中判断位置;
public @NonNull View getView(int position, @Nullable View convertView,
@NonNull 视图组父级){
这可以使用 ArrayAdapter
中的覆盖函数 getView
来完成。您可以检查位置是否等于列表中的项目数。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
...
...
if(position == yourList.size() - 1) {
//do your work
//it's better to make interface handle this call inside your Activity
}
}
希望对您有所帮助
我认为你可以根据自己的情况变通。使用处理程序,在调用 notifyDataSetChanged 或将适配器设置为列表视图后,您可以使用:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 200ms
lv.smoothScrollToPosition(i);
}
}, 200);
我基本上用 ArrayAdapter
填充 ListView lv
并且我需要在渲染后以编程方式 lv.smoothScrollToPosition(i)
;否则,它将不起作用。我正在收听的事件是 onWindowFocusChanged(boolean hasFocus)
将适配器设置为列表视图。
如何捕捉滚动 lv
的最佳时刻?
尝试在getView方法中判断位置;
public @NonNull View getView(int position, @Nullable View convertView, @NonNull 视图组父级){
这可以使用 ArrayAdapter
中的覆盖函数 getView
来完成。您可以检查位置是否等于列表中的项目数。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
...
...
if(position == yourList.size() - 1) {
//do your work
//it's better to make interface handle this call inside your Activity
}
}
希望对您有所帮助
我认为你可以根据自己的情况变通。使用处理程序,在调用 notifyDataSetChanged 或将适配器设置为列表视图后,您可以使用:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 200ms
lv.smoothScrollToPosition(i);
}
}, 200);