forked from GitHub-Mirror/riotX-android
Timeline : try to fix scroll issues...
This commit is contained in:
@ -40,6 +40,7 @@ class RoomDetailFragment : RiotFragment() {
|
||||
private var eventId: String? by FragmentArgumentDelegate()
|
||||
private val timelineEventController by inject<TimelineEventController>(parameters = { ParameterList(roomId) })
|
||||
private lateinit var room: Room
|
||||
private lateinit var scrollOnNewMessageCallback: ScrollOnNewMessageCallback
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.fragment_room_detail, container, false)
|
||||
@ -71,9 +72,9 @@ class RoomDetailFragment : RiotFragment() {
|
||||
|
||||
private fun setupRecyclerView() {
|
||||
val layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, true)
|
||||
val listUpdateCallback = ScrollOnNewMessageCallback(layoutManager)
|
||||
scrollOnNewMessageCallback = ScrollOnNewMessageCallback(layoutManager)
|
||||
recyclerView.layoutManager = layoutManager
|
||||
timelineEventController.addModelBuildListener { it.dispatchTo(listUpdateCallback) }
|
||||
timelineEventController.addModelBuildListener { it.dispatchTo(scrollOnNewMessageCallback) }
|
||||
recyclerView.setController(timelineEventController)
|
||||
}
|
||||
|
||||
@ -91,6 +92,7 @@ class RoomDetailFragment : RiotFragment() {
|
||||
}
|
||||
|
||||
private fun renderEvents(events: PagedList<EnrichedEvent>?) {
|
||||
scrollOnNewMessageCallback.hasBeenUpdated.set(true)
|
||||
timelineEventController.timeline = events
|
||||
}
|
||||
|
||||
|
@ -2,11 +2,14 @@ package im.vector.riotredesign.features.home.room.detail
|
||||
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import im.vector.riotredesign.core.platform.DefaultListUpdateCallback
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
|
||||
class ScrollOnNewMessageCallback(private val layoutManager: LinearLayoutManager) : DefaultListUpdateCallback {
|
||||
|
||||
val hasBeenUpdated = AtomicBoolean(false)
|
||||
|
||||
override fun onInserted(position: Int, count: Int) {
|
||||
if (position == 0 && layoutManager.findFirstVisibleItemPosition() == 0) {
|
||||
if (hasBeenUpdated.compareAndSet(true, false) && position == 0 && layoutManager.findFirstVisibleItemPosition() == 0) {
|
||||
layoutManager.scrollToPosition(0)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user