Fix focus issues on RV.

Don't set focusable=false - that's the wrong thing to do, per Yigit.
For now, just temporarily make the RV unfocusable while performing the
focus search for kb navigation.

BUG=27221751

Change-Id: I37ed77eb2aecf522a85c8a7c181e89c0bf73765d
This commit is contained in:
Ben Kwa
2016-02-17 14:08:52 -08:00
parent 21eb4e2684
commit 86bf12397b
2 changed files with 7 additions and 5 deletions

View File

@@ -193,11 +193,6 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi
mRecView.setItemAnimator(new DirectoryItemAnimator(getActivity()));
// Make the RecyclerView unfocusable. This is needed in order for the focus search code in
// FocusManager to work correctly. Setting android:focusable=false in the layout xml doesn't
// work, for some reason.
mRecView.setFocusable(false);
// TODO: Add a divider between views (which might use RecyclerView.ItemDecoration).
if (DEBUG_ENABLE_DND) {
setupDragAndDropOnDirectoryView(mRecView);

View File

@@ -158,7 +158,14 @@ class FocusManager implements View.OnFocusChangeListener {
}
if (searchDir != -1) {
// Focus search behaves badly if the parent RecyclerView is focused. However, focusable
// shouldn't be unset on RecyclerView, otherwise focus isn't properly restored after
// events that cause a UI rebuild (like rotating the device). Compromise: turn focusable
// off while performing the focus search.
// TODO: Revisit this when RV focus issues are resolved.
mView.setFocusable(false);
View targetView = view.focusSearch(searchDir);
mView.setFocusable(true);
// TargetView can be null, for example, if the user pressed <down> at the bottom
// of the list.
if (targetView != null) {