如何在附加 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);