@@ -32,6 +32,7 @@ import androidx.navigation.ui.onNavDestinationSelected
3232import androidx.palette.graphics.Palette
3333import androidx.recyclerview.widget.ConcatAdapter
3434import androidx.recyclerview.widget.LinearLayoutManager
35+ import androidx.recyclerview.widget.RecyclerView
3536import coil.load
3637import com.google.android.material.dialog.MaterialAlertDialogBuilder
3738import com.yenaly.han1meviewer.ADVANCED_SEARCH_MAP
@@ -86,76 +87,140 @@ class HomePageFragment : YenalyFragment<FragmentHomePageBinding>(),
8687 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .GENRE to " 裏番" ))
8788 }
8889 },
89- latestHanimeAdapter.wrappedWith {
90- LinearLayoutManager (
91- context, LinearLayoutManager .HORIZONTAL , false
92- )
90+ latestHanimeAdapter
91+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
92+ .apply {
93+ doOnWrap {
94+ val key = " latestHanime"
95+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
96+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
97+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
98+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
99+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
100+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
101+ }
102+ })
103+ }
93104 },
94105 VideoColumnTitleAdapter (R .string.latest_release).apply {
95106 onMoreHanimeListener = {
96107 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .SORT to " 最新上市" ))
97108 }
98109 },
99- latestReleaseAdapter.wrappedWith {
100- LinearLayoutManager (
101- context, LinearLayoutManager .HORIZONTAL , false
102- )
110+ latestReleaseAdapter
111+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
112+ .apply {
113+ doOnWrap {
114+ val key = " latestRelease"
115+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
116+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
117+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
118+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
119+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
120+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
121+ }
122+ })
123+ }
103124 },
104125 VideoColumnTitleAdapter (R .string.latest_upload).apply {
105126 onMoreHanimeListener = {
106127 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .SORT to " 最新上傳" ))
107128 }
108129 },
109- latestUploadAdapter.wrappedWith {
110- LinearLayoutManager (
111- context, LinearLayoutManager .HORIZONTAL , false
112- )
130+ latestUploadAdapter
131+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
132+ .apply {
133+ doOnWrap {
134+ val key = " latestUpload"
135+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
136+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
137+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
138+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
139+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
140+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
141+ }
142+ })
143+ }
113144 },
114145 VideoColumnTitleAdapter (R .string.chinese_subtitle).apply {
115146 onMoreHanimeListener = {
116- showSearchFragment(
117- advancedSearchMapOf(
118- HAdvancedSearch .TAGS to hashMapOf(
119- " video_attributes" to " 中文字幕"
120- )
121- )
122- )
147+ showSearchFragment(advancedSearchMapOf(HAdvancedSearch .TAGS to hashMapOf(" video_attributes" to " 中文字幕" )))
123148 }
124149 },
125- chineseSubtitleAdapter.wrappedWith {
126- LinearLayoutManager (
127- context, LinearLayoutManager .HORIZONTAL , false
128- )
150+ chineseSubtitleAdapter
151+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
152+ .apply {
153+ doOnWrap {
154+ val key = " chineseSubtitle"
155+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
156+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
157+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
158+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
159+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
160+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
161+ }
162+ })
163+ }
129164 },
130165 VideoColumnTitleAdapter (R .string.they_watched).apply {
131166 onMoreHanimeListener = {
132167 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .SORT to " 他們在看" ))
133168 }
134169 },
135- hanimeTheyWatchedAdapter.wrappedWith {
136- LinearLayoutManager (
137- context, LinearLayoutManager .HORIZONTAL , false
138- )
170+ hanimeTheyWatchedAdapter
171+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
172+ .apply {
173+ doOnWrap {
174+ val key = " hanimeTheyWatched"
175+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
176+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
177+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
178+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
179+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
180+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
181+ }
182+ })
183+ }
139184 },
140185 VideoColumnTitleAdapter (R .string.ranking_today).apply {
141186 onMoreHanimeListener = {
142187 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .SORT to " 本日排行" ))
143188 }
144189 },
145- hanimeCurrentAdapter.wrappedWith {
146- LinearLayoutManager (
147- context, LinearLayoutManager .HORIZONTAL , false
148- )
190+ hanimeCurrentAdapter
191+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false ) }
192+ .apply {
193+ doOnWrap {
194+ val key = " hanimeCurrent"
195+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
196+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
197+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
198+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
199+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
200+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
201+ }
202+ })
203+ }
149204 },
150205 VideoColumnTitleAdapter (R .string.ranking_this_month).apply {
151206 onMoreHanimeListener = {
152207 showSearchFragment(advancedSearchMapOf(HAdvancedSearch .SORT to " 本月排行" ))
153208 }
154209 },
155- hotHanimeMonthlyAdapter.wrappedWith {
156- LinearLayoutManager (
157- context, LinearLayoutManager .HORIZONTAL , false
158- )
210+ hotHanimeMonthlyAdapter
211+ .wrappedWith { LinearLayoutManager (context, LinearLayoutManager .HORIZONTAL , false )}
212+ .apply {
213+ doOnWrap {
214+ val key = " hotHanimeMonthly"
215+ val lm = layoutManager as ? LinearLayoutManager ? : return @doOnWrap
216+ val pos = viewModel.horizontalScrollPositions[key] ? : 0
217+ post { lm.scrollToPositionWithOffset(pos, 0 ) }
218+ addOnScrollListener(object : RecyclerView .OnScrollListener () {
219+ override fun onScrolled (rv : RecyclerView , dx : Int , dy : Int ) {
220+ viewModel.horizontalScrollPositions[key] = lm.findFirstVisibleItemPosition()
221+ }
222+ })
223+ }
159224 }
160225 )
161226
0 commit comments