不知道這是一個糟糕的解決方案,但一個更好的答案出來之前:
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (previousScrollState != RecyclerView.SCROLL_STATE_IDLE) {
if (asyncCheckScrollState == null || asyncCheckScrollState.isCancelled()) {
asyncCheckScrollState = new AsyncCheckScrollState();
asyncCheckScrollState.execute();
}
}
// ...
previousScrollState = newState;
}
和:
public class AsyncCheckScrollState extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
recList.setTouchEnabled(false);
}
@Override
protected Void doInBackground(Void... params) {
try {
while (previousScrollState != 0) {
if (isCancelled()) {
Log.i(TAG, "canceled ");
break;
}
}
} catch (Exception e) {
} finally {
this.cancel(true);
}
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
recList.setTouchEnabled(true);
}
}