回答編集履歴
1
追記
answer
CHANGED
@@ -65,4 +65,48 @@
|
|
65
65
|
}
|
66
66
|
}
|
67
67
|
}
|
68
|
+
```
|
69
|
+
|
70
|
+
最後まで行ったら最初に戻るようにするには、次のように変更すると良いでしょう。
|
71
|
+
|
72
|
+
```diff
|
73
|
+
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder> {
|
74
|
+
private RecyclerView recyclerView;
|
75
|
+
+ private LinearLayoutManager layoutManager;
|
76
|
+
private List<Item> items;
|
77
|
+
+ private int focusPosition = -1;
|
78
|
+
|
79
|
+
- public CustomAdapter(RecyclerView recyclerView, List<Item> items) {
|
80
|
+
+ public CustomAdapter(RecyclerView recyclerView, LinearLayoutManager layoutManager, List<Item> items) {
|
81
|
+
this.recyclerView = recyclerView;
|
82
|
+
+ this.layoutManager = layoutManager;
|
83
|
+
this.items = items;
|
84
|
+
+
|
85
|
+
+ recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
86
|
+
+ @Override
|
87
|
+
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
88
|
+
+ if (newState == RecyclerView.SCROLL_STATE_IDLE && focusPosition >= 0) {
|
89
|
+
+ setFocus(focusPosition);
|
90
|
+
+ focusPosition = -1;
|
91
|
+
+ }
|
92
|
+
+ }
|
93
|
+
+ });
|
94
|
+
}
|
95
|
+
|
96
|
+
// 略
|
97
|
+
|
98
|
+
public void focusNext() {
|
99
|
+
int position = getAdapterPosition() + 1;
|
100
|
+
- if (position < items.size()) {
|
101
|
+
+ if (position == items.size()) {
|
102
|
+
+ position = 0;
|
103
|
+
+ }
|
104
|
+
+ if (position >= layoutManager.findFirstCompletelyVisibleItemPosition() &&
|
105
|
+
+ position <= layoutManager.findLastCompletelyVisibleItemPosition()) {
|
106
|
+
setFocus(position);
|
107
|
+
+ } else {
|
108
|
+
+ focusPosition = position;
|
109
|
+
+ recyclerView.smoothScrollToPosition(position);
|
110
|
+
}
|
111
|
+
}
|
68
112
|
```
|