2 種類のビューを保持するRecyclerView
with があります。Adapter
最初のビューは、次のビューよりも幅と高さがわずかに大きくなっています。
を含むアクティビティを開始するときRecyclerView
に、特定の位置までスクロールしたいAdapter
。に接続されている をscrollToPositionWithOffset(position, offset)
呼び出すことでこれを行います。LinearLayoutManager
RecyclerView
次のコードは、セットアップを大まかに説明しています (特に変わったことはありません)。RecyclerView
呼び出しを含むアクティビティTimeline.scrollTo(position)
。Scala コードの投稿についてはご容赦ください。
を保持する活動RecyclerView
class Activity extends [...] {
lazy val timeline = findView( TR.layout_screen_transaction_timeline )
override def onCreate( state: Option[Bundle] ) = {
super.onCreate( state )
setContentView( R.layout.screen_transaction_timeline )
[...]
timeline.setAdapter( adapter )
if ( state.isEmpty ) {
focus.foreach { position ⇒
new Handler().post { () ⇒
timeline.scrollTo( position )
}
}
}
}
LinearLayoutManager を使用した RecyclerView
class Timeline( attributes: AttributeSet = null, style: Int = 0 )( implicit context: Context )
extends RecyclerView( context, attributes, style ) {
[...]
setHasFixedSize( true )
setLayoutManager( layoutManager )
def scrollTo( position: Int ) = {
layoutManager.scrollToPositionWithOffset( position, 0 )
}
object layoutManager extends LinearLayoutManager( context, VERTICAL, false )
}
アダプタ
object adapter extends Adapter[Holder] {
override def getItemCount = tour.shipments.length + 1
override def onBindViewHolder( holder: Holder, position: Int ) = holder.view match {
case collection: widget.transaction.timeline.Header ⇒
collection.set( tour.collection, tour, tour.state == Tour.State.New )
case waypoint: widget.transaction.timeline.Waypoint ⇒
waypoint.set( position, tour.shipments( position - 1 ), focus.contains( position ) )
}
override def onCreateViewHolder( parent: ViewGroup, kind: Int ) = Holder {
val view = kind match {
case 0 ⇒ new widget.transaction.timeline.Header()
case 1 ⇒ new widget.transaction.timeline.Waypoint()
}
view.setLayoutParams( new RecyclerView.LayoutParams( MATCH_PARENT, WRAP_CONTENT ) )
view
}
override def getItemViewType( position: Int ) = position match {
case 0 ⇒ 0
case _ ⇒ 1
}
}
最後の位置までスクロールしたい場合を除いて、すべて正常に動作します。その場合、 はLinearLayoutManager
正しい位置にスクロールすることもあれば、少しずれてスクロールすることもあります。
ActionBar
更新: を保持しているアクティビティでを削除すると、RecyclerView
この問題が解決することがわかりました。しかし、私はActionBar
...