|
|
@ -51,37 +51,40 @@ public class MyGridLayoutManager extends GridLayoutManager { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public View onInterceptFocusSearch(View focused, int direction) { |
|
|
|
public View onInterceptFocusSearch(View focused, int direction) { |
|
|
|
int currentPosition = getPosition(getFocusedChild()); |
|
|
|
int currentPosition = getPosition(getFocusedChild()); |
|
|
|
int spanCount = getSpanCount(); |
|
|
|
int count = getItemCount()-1; |
|
|
|
int lastVisiblePosition = findLastVisibleItemPosition(); |
|
|
|
|
|
|
|
switch (direction) { |
|
|
|
switch (direction) { |
|
|
|
case View.FOCUS_DOWN: |
|
|
|
case View.FOCUS_DOWN: |
|
|
|
if(currentPosition + getSpanCount()<lastVisiblePosition){ |
|
|
|
if (currentPosition + getSpanCount() < count) { |
|
|
|
int nextRowFirstPosition1 = currentPosition + getSpanCount(); |
|
|
|
int nextRowFirstPosition1 = currentPosition + getSpanCount(); |
|
|
|
scrollToPosition(nextRowFirstPosition1); |
|
|
|
scrollToPosition(nextRowFirstPosition1); |
|
|
|
return findViewByPosition(nextRowFirstPosition1); |
|
|
|
return findViewByPosition(nextRowFirstPosition1); |
|
|
|
}else if(currentPosition + getSpanCount()>lastVisiblePosition){ |
|
|
|
} else if (currentPosition + getSpanCount() > count) { |
|
|
|
scrollToPosition(lastVisiblePosition); |
|
|
|
scrollToPosition(count); |
|
|
|
return findViewByPosition(lastVisiblePosition); |
|
|
|
return findViewByPosition(count); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case View.FOCUS_UP: |
|
|
|
case View.FOCUS_UP: |
|
|
|
if (currentPosition % getSpanCount() == 0 && upView != null) { |
|
|
|
if (currentPosition % getSpanCount() == 0 && upView != null) { |
|
|
|
upView.requestFocus(); |
|
|
|
upView.requestFocus(); |
|
|
|
|
|
|
|
} else if (currentPosition - getSpanCount() < count) { |
|
|
|
|
|
|
|
int nextRowFirstPosition1 = currentPosition - getSpanCount(); |
|
|
|
|
|
|
|
scrollToPosition(nextRowFirstPosition1); |
|
|
|
|
|
|
|
return findViewByPosition(nextRowFirstPosition1); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case View.FOCUS_RIGHT: |
|
|
|
case View.FOCUS_RIGHT: |
|
|
|
if (currentPosition % getSpanCount() == getSpanCount() - 1) { |
|
|
|
if (currentPosition<count) { |
|
|
|
int nextRowFirstPosition = currentPosition + getSpanCount() - (getSpanCount() - 1); |
|
|
|
int nextRowFirstPosition = currentPosition + getSpanCount() - (getSpanCount() - 1); |
|
|
|
scrollToPosition(nextRowFirstPosition); |
|
|
|
scrollToPosition(nextRowFirstPosition); |
|
|
|
return findViewByPosition(nextRowFirstPosition); |
|
|
|
return findViewByPosition(nextRowFirstPosition); |
|
|
|
} else if (currentPosition == lastVisiblePosition) { |
|
|
|
} else if (currentPosition == count) { |
|
|
|
return findViewByPosition(currentPosition); |
|
|
|
return findViewByPosition(currentPosition); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case View.FOCUS_LEFT: |
|
|
|
case View.FOCUS_LEFT: |
|
|
|
if (currentPosition == 0) { |
|
|
|
if (currentPosition == 0) { |
|
|
|
return findViewByPosition(currentPosition); |
|
|
|
return findViewByPosition(currentPosition); |
|
|
|
} else if (currentPosition % getSpanCount() == 0) { |
|
|
|
} else if (currentPosition <=count) { |
|
|
|
int nextRowFirstPosition = currentPosition - 1; |
|
|
|
int nextRowFirstPosition = currentPosition - 1; |
|
|
|
scrollToPosition(nextRowFirstPosition); |
|
|
|
scrollToPosition(nextRowFirstPosition); |
|
|
|
return findViewByPosition(nextRowFirstPosition); |
|
|
|
return findViewByPosition(nextRowFirstPosition); |
|
|
|