1.解决同列长按或快按方向上下键焦点并未落在同例而是可视最后一个item问题

This commit is contained in:
2026-03-18 11:13:36 +08:00
parent c7f0f1ef7b
commit c7600b014a

View File

@@ -6,6 +6,7 @@ import android.content.res.TypedArray;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.FocusFinder;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -227,7 +228,7 @@ public class CustomRecyclerViewer extends RecyclerView {
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// int keyCode = event.getKeyCode();
int keyCode = event.getKeyCode();
// if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP) {
// long current = System.currentTimeMillis();
// boolean res;
@@ -240,34 +241,42 @@ public class CustomRecyclerViewer extends RecyclerView {
// return res;
// }
//
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP) {
// View focusedView = getFocusedChild(); // 获取当前获得焦点的view
// View nextFocusView;
// try {
// if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
// // 通过findNextFocus获取下一个需要得到焦点的view
// nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_DOWN);
// } else {
// // 通过findNextFocus获取下一个需要得到焦点的view
// nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_UP);
// }
//
//
// LogUtils.loge("nextFocusView===>"+nextFocusView);
//
// } catch (Exception e) {
// nextFocusView = null;
// }
//
// // 如果获取失败(也就是说需要交给系统来处理焦点, 消耗掉事件,不让系统处理, 并让先前获取焦点的view获取焦点)
// if (nextFocusView == null) {
// focusedView.requestFocus();
// return true;
//
// }
View focusedView = getFocusedChild(); // 获取当前获得焦点的view
View nextFocusView;
try {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
// 通过findNextFocus获取下一个需要得到焦点的view
nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_DOWN);
} else {
// 通过findNextFocus获取下一个需要得到焦点的view
nextFocusView = FocusFinder.getInstance().findNextFocus(this, focusedView, View.FOCUS_UP);
}
LogUtils.loge("nextFocusView===>" + nextFocusView);
} catch (Exception e) {
nextFocusView = null;
}
// 如果获取失败(也就是说需要交给系统来处理焦点, 消耗掉事件,不让系统处理, 并让先前获取焦点的view获取焦点)
if (nextFocusView == null) {
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
focusedView.requestFocus(View.FOCUS_DOWN);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
focusedView.requestFocus(View.FOCUS_UP);
}
return true;
}
// }
// }
}
// }
}
return super.dispatchKeyEvent(event);
}